给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
示例 1:

| 12
 
 | 输入: root = [2,1,3]输出: 1
 
 | 
示例 2:
 
 
| 12
 
 | 输入: [1,2,3,4,null,5,6,null,null,7]输出: 7
 
 | 
提示:
- 二叉树的节点个数的范围是 [1,104]
- -231 <= Node.val <= 231 - 1
迭代法(层次遍历)
记录每一层最左结点的值,最后一层的最左节点几位数左下角的结点
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 | class Solution {public int findBottomLeftValue(TreeNode root) {
 if(root==null) return 0;
 int ans = 0;
 Queue<TreeNode> que = new LinkedList<>();
 que.offer(root);
 while(!que.isEmpty()){
 int size = que.size();
 for(int i = 0 ; i<size ;i++){
 TreeNode node = que.poll();
 if(i==0) ans = node.val;
 if(node.left!=null) que.offer(node.left);
 if(node.right!=null) que.offer(node.right);
 }
 }
 return ans;
 }
 
 }
 
 | 
递归法(前序遍历)
记录最大化深度,前序遍历每一层遇到的第一个节点必定是最左节点
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 
 | class Solution {int max_deep = -1;
 int value = 0;
 public int findBottomLeftValue(TreeNode root) {
 find_traversal(root, 0);
 return value;
 }
 
 
 public void find_traversal(TreeNode root , int deep){
 if(root==null) return;
 if(root.left==null && root.right==null){
 if(deep > max_deep){
 value = root.val;
 max_deep = deep;
 }
 }
 
 if(root.left != null) find_traversal(root.left, deep+1);
 if(root.right != null)  find_traversal(root.right, deep+1);
 }
 }
 
 |