LeetCode_513. 找树左下角的值
原创
©著作权归作者所有:来自51CTO博客作者晴天码字的原创作品,请联系作者获取转载授权,否则将追究法律责任
题目描述:
给定一个二叉树,在树的最后一行找到最左边的值。
示例 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];
}
};
思路二:中序遍历,记录最深层最左边的节点
/**
* 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;
}
};