0%

leetcode-513

BFS

开始做BFS的题目, 题目链接: https://leetcode-cn.com/problems/find-bottom-left-tree-value/

1. 想到的是标记层数,记录最新一层的的第一个,最后一次记录即为需要的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int findBottomLeftValue(TreeNode* root) {
queue<TreeNode*> work;
work.push(root);
map<TreeNode*, int> dis;
dis[root] = 0;

int cur = 0;
int ans = root->val;
while (!work.empty()) {
TreeNode* tmp = work.front();
work.pop();
if (dis[tmp] != cur) {
ans = tmp->val;
cur = dis[tmp];
}

if (tmp->left != nullptr) {
work.push(tmp->left);
dis[tmp->left] = dis[tmp] + 1;
}

if (tmp->right != nullptr) {
work.push(tmp->right);
dis[tmp->right] = dis[tmp] + 1;
}
}

return ans;
}
};

2. 参考评论代码,从右往左遍历,最后一个即为需要的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int findBottomLeftValue(TreeNode* root) {
queue<TreeNode*> work;
work.push(root);

TreeNode* ans = root;
while (!work.empty()) {
ans = work.front();
work.pop();
if (ans->right != nullptr) {
work.push(ans->right);
}

if (ans->left != nullptr) {
work.push(ans->left);
}
}

return ans->val;
}
};