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);
            }
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读