题目:
Given a binary tree, find the leftmost value in the last row of the tree.
Example 1:
Input:
2
/ \
1 3
Output:
1
Example 2:
Input:
1
/ \
2 3
/ / \
4 5 6
/
7
Output:
7
题目分析:
1、根据题干,题目要求计算一颗树的底部(左侧)的值,也就是找到深度最大的叶节点,若存在多个,则取最左边的。
2、DFS算法:利用Stack实现DFS,设置一个结点指针记录所遍历到当前为止的最深的结点中最左边那个(记录最深的,凡是右边的同等深度不进行替换即可),这样整个DFS结束后返回这个记录指针的val即可。
3、BFS算法:BFS在本题中显然比DFS更适合,因为它不需要DFS中单独记录之前的判断信息,判断过程也更加简单。具体实现由Queue完成,BFS也可以理解为层序遍历,我们只需要将常规的层序遍历稍加改动,即每层从右端开始push即可,这样整个BFS完成的时候最后一个元素即为所求的结点,返回其val即可。此题采用BFS。
代码完成:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
#include<queue>
class Solution {
public:
int findBottomLeftValue(TreeNode* root) {
queue<TreeNode*> Q;
Q.push(root);
int ans;
while(Q.size()){
if(Q.front()->right != NULL)
Q.push(Q.front()->right);
if(Q.front()->left != NULL)
Q.push(Q.front()->left);
ans = Q.front()->val;
Q.pop();
}
return ans;
}
};