找树左下角的值
题目链接:力扣题目链接
难度:中等
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。
示例
输入: root = [2,1,3]
输出: 1
定义一个二叉树节点
//二叉树节点的定义。
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(){}
TreeNode(int val){
this.val = val;
}
TreeNode(int val,TreeNode left,TreeNode right){
this.val = val;
this.left = left;
this.right = right;
}
}
思路
要找最后一行,第一想到的就是层序遍历,使用递归的话就比较复杂了。
使用递归的话也就是找深度最大的叶子节点,深度最大的叶子节点一定是最后一行。
递归代码
class Solution{
private int Deep = -1;
private int value = 0;
public int findBottomLeftValue(TreeNode root){
value = root.val;
findLeftValue(root,0);
return value;
}
private void findLeftValue(TreeNode root,Integer deep){
if(root == null) return;
if(root.left == null && root.right == null){
if(deep > Deep){
value = root.val;// 最大深度最左面的数值
Deep = deep; // 更新最大深度
}
}
if(root.left != null) findLeftValue(root.left,deep + 1);
if(root.right != null) findLeftValue(root.right,deep + 1);
}
}
迭代代码
class Solution{
public int findBottomLeftValue(TreeNode root) {
if(root == null) return 0;
int result = 0;
Queue<TreeNode> queue = new new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
int len = queue.size();
for(int i=0;i<len;i++){
TreeNode node = queue.poll();
if(i == 0) result = node.val;
if(node.left != null) queue.offer(node.left);
if(node.right != null) queue.offer(node.right);
}
}
return result;
}
}