Problem:
Given a binary tree, find the leftmost value in the last row of the tree.
Explanation:
找二叉树的左下结点
My Thinking:
层序遍历,从右向左遍历,最后剩余的就是最左结点
My Solution:
class Solution {
public int findBottomLeftValue(TreeNode root) {
Queue<TreeNode> queue=new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
root=queue.poll();
if(root.right!=null)
queue.add(root.right);
if(root.left!=null)
queue.add(root.left);
}
return root.val;
}
}
Optimum Thinking:
维护一个最大深度h,如果当前结点的深度比h大,那么就更新h为当前深度,ans为当前结点的值,由于是类似前序遍历,因此ans保留的一定是当前深度的最左结点。
Optimum Solution:
class Solution {
int ans=0, h=0;
public int findBottomLeftValue(TreeNode root) {
findBottomLeftValue(root, 1);
return ans;
}
public void findBottomLeftValue(TreeNode root, int depth) {
if (h<depth) {
ans=root.val;
h=depth;
}
if (root.left!=null)
findBottomLeftValue(root.left, depth+1);
if (root.right!=null)
findBottomLeftValue(root.right, depth+1);
}
}