给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
示例 1:
输入: root = [2,1,3]
输出: 1
示例 2:
输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7
思路一:前序遍历
左下角的值:结点深度最大、最靠左
前序遍历所有结点,找到遍历过程中深度最大的第一个结点(因为前序遍历过程是自顶向下,从左到右的,所以第一个深度最大的结点就是最靠左的)。
class Solution {
public:
int res=0;
int depth=0;
int max=INT_MIN;
int findBottomLeftValue(TreeNode* root) {
traverse(root);
return res;
}
void traverse(TreeNode* root)
{
if(root==nullptr)
return ;
depth++;
if(max<depth)//前序遍历,找到深度最大的第一个结点
{
max=depth;
res=root->val;
}
traverse(root->left);
traverse(root->right);
depth--;
}
};
思路二:层序遍历
层序遍历,左下角的值就是最后一层的第一个值
class Solution
{
public:
int findBottomLeftValue(TreeNode* root)
{
int res=0;
if(root==nullptr)
return 0;
queue<TreeNode*> q;
q.push(root);
while(!q.empty())
{
int size=q.size();
for(int i=0;i<size;i++)
{
TreeNode* tmp=q.front();
q.pop();
if(i==0)//这一层的第一个元素等于res
{
res=tmp->val;
}
if(tmp->left) q.push(tmp->left);
if(tmp->right) q.push(tmp->right);
}
}
return res;
}
};