题目
给定一个二叉树,在树的最后一行找到最左边的值。
示例 1:
输入:
2
/ \
1 3
输出:
1
示例 2:
输入:
1
/ \
2 3
/ / \
4 5 6
/
7
输出:
7
注意: 您可以假设树(即给定的根节点)不为 NULL。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-bottom-left-tree-value
解题思路
觉得这里题目评级有点奇怪,这道题如果考察层序遍历的话,难度明显是小于判断是否是堂兄弟的那道题。但是这道题是中等,那道题却是简单,搞不懂。
思路比较简单,就是层序遍历过程中记录最左边的值,直到遍历完成。这里最左边的值根据层序的写法,就是每层的第一个值,也就是每次循环前队列的头。
代码(C++)
/**
* 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*> q;
q.push(root);
int lval=0;
while(!q.empty()){
int qsz=q.size();
lval=q.front()->val;
for(int i=0;i<qsz;++i){
TreeNode* node=q.front();
q.pop();
if(node->left) q.push(node->left);
if(node->right) q.push(node->right);
}
}
return lval;
}
};