跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录
LeetCode:513.找二叉树左下角的
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
示例 1:
输入: root = [2,1,3]
输出: 1
示例 2:
输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7
本体使用层序遍历感觉会更简单,但是下面使用的是递归遍历,用到了回溯;这里面使用前/中/后序都可以,因为这里不涉及中间节点的处理逻辑,需要找到的是叶子节点的值
	// 深度的最大值
    int maxDepth = Integer.MIN_VALUE;
    // 结果
    int result;
    public int findBottomLeftValue(TreeNode root) {
        traversal(root, 0);
        return result;
    }
    private void traversal(TreeNode cur, int depth) {
        if (cur.left == null && cur.right == null) {
            if (depth > maxDepth) {
                // 只有找到更大深度的时候采取收集结果
                maxDepth = depth;
                result = cur.val;
            }
        }
        // 左
        if (cur.left != null) {
            // 回溯 也可以直接写成traversal(cur.left, depth++);
            depth++;
            traversal(cur.left, depth);
            depth--;
        }
        // 右
        if (cur.right != null) {
            depth++;
            traversal(cur.right, depth);
            depth--;
        }
    }





















