513.找树左下角的值

77 阅读1分钟

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;
}