513. 找树左下角的值
2025-03-12 本文已影响0人
名字是乱打的
一 题目:
二思路:
找最底层 最左边的值,那么我们可以记录每一层层和左值,现有结果的层值和左值
先看右孩子,再看左孩子,这样只要保障层级大于等于就可以进行覆盖值交换了
三代码:
public static int findBottomLeftValue(TreeNode root) {
AtomicInteger res = new AtomicInteger(root.val);
//最底层的最左边
searchBottomLeft(root, 0, 0,new AtomicInteger(Integer.MIN_VALUE) , new AtomicInteger(Integer.MIN_VALUE), res);
return res.get();
}
private static void searchBottomLeft(TreeNode node, int currLevel, int currLeft, AtomicInteger resLevel, AtomicInteger resLeft, AtomicInteger res) {
if (node.left == null && node.right == null) {
//因为已经保障了同一层先找右边的再找左边的,所以这
if (currLevel >= resLevel.get()) {
res.set(node.val);
resLeft.set(currLeft);
resLevel.set(currLevel);
}
} else {
//下一层先看右再看左,这样只用比较高度即可
//先向右找
if (node.right != null) {
//向右
searchBottomLeft(node.right, currLevel + 1, currLeft - 1, resLevel, resLeft, res);
}
//再向左找,这样同一层就可以覆盖左边的了
if (node.left != null) {
searchBottomLeft(node.left, currLevel + 1, currLeft + 1, resLevel, resLeft, res);
}
}
}