513.找树左下角的值
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
解题思路: 找树左下角的值,这个很明显是找最后一层第一个的值。可以利用层级遍历,遍历到最后一层的时候,取最后一层的第一个值。 难点: 如何判断是不是最后一行(解决方案:记录深度最大的叶子节点)
private int deep = -1;
private int value = 0;
/**
* 递归法
*/
public int findBottomLeftValue(TreeNode root) {
value = root.val;
finalLeftValue(root, 0);
return value;
}
private void finalLeftValue(TreeNode root, int de) {
if (root == null) return;
if (root.left == null && root.right == null) {
if (de > deep) {
value = root.val;
deep = de;
}
}
if (root.left != null) finalLeftValue(root.left, de + 1);
if (root.right != null) finalLeftValue(root.right, de + 1);
}
// 迭代法
public int findBottomLeft(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
int res = 0;
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode poll = queue.poll();
assert poll != null;
if (i == 0) {
res = poll.val;
}
if (poll.left != null) {
queue.offer(poll.left);
}
if (poll.right != null) {
queue.offer(poll.right);
}
}
}
return res;
}