题目描述:

给定一个二叉树,在树的最后一行找到最左边的值。

示例 1:

输入:

2
/ \
1 3

输出:
1


示例 2:

输入:

1
/ \
2 3
/ / \
4 5 6
/
7

输出:
7


注意: 您可以假设树(即给定的根节点)不为 NULL。

思路1:此题目第一眼看到就想起了​​二叉树的右视图​​。这个题跟此题类似,可以按照二叉树的左视图来做,最后只需要返回最后一层的值即可

/**
* 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) {
vector<int> res;
queue<TreeNode*> que;
que.push(root);
while(!que.empty()){
int size=que.size();
res.push_back(que.front()->val);
while(size--){
TreeNode* now=que.front();
que.pop();
if(now->left)
que.push(now->left);
if(now->right)
que.push(now->right);
}
}
return res[res.size()-1];
}
};

LeetCode_513. 找树左下角的值_二叉树


思路二:中序遍历,记录最深层最左边的节点

/**
* 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 res=-1,maxdepth=-1;
void inorder(TreeNode* root,int depth){
if(root==NULL)
return ;
inorder(root->left,depth+1);
if(maxdepth<depth){
maxdepth=depth;
res=root->val;
}
inorder(root->right,depth+1);
}
int findBottomLeftValue(TreeNode* root) {
inorder(root,0);
return res;
}
};

LeetCode_513. 找树左下角的值_二叉树_02