513. 找树左下角的值
难度:中等
给定一个二叉树的 根节点 root
,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
易错点
这个题注意一个容易错的地方:本题需要的左下角的值是指最后一行最左侧的叶节点的值,而不是单纯最左侧的值!!
例如对于下面的树来说,需要返回的值是7而不是4!
所以以下代码是不行的:
TreeNode node = root;//根节点
while(node.left != null){
node = node.left;
}
return node.left;
正确做法:
如果要寻找最后一行的元素,那么使用层次遍历法是非常简单就可以实现的。
基础的框架就是层次遍历法的框架
在每一次遍历时都记录最左侧的值,由于使用的数据结构是队列,因此需要记录的元素就是下一个出队的元素的值。
package cn.edu.xjtu.carlWay.tree.bottomLeftVal;
import cn.edu.xjtu.Util.TreeNode.TreeNode;
import java.util.Deque;
import java.util.LinkedList;
/**
* 513. 找树左下角的值
* 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
* <p>
* 假设二叉树中至少有一个节点。
* <p>
* https://leetcode-cn.com/problems/find-bottom-left-tree-value/
*/
public class Solution {
public int findBottomLeftValue(TreeNode root) {
if (root == null) {
return 0;
}
Deque<TreeNode> deque = new LinkedList<>();
deque.addLast(root);
int leftVal = 0;
while (!deque.isEmpty()) {
leftVal = deque.peekFirst().val;
int size = deque.size();
while (size > 0) {
TreeNode node = deque.removeFirst();
if (node.left != null) {
deque.addLast(node.left);
}
if (node.right != null) {
deque.addLast(node.right);
}
size--;
}
}
return leftVal;
}
}