Skip to content

513.找树左下角的值

难度:中等

给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。

假设二叉树中至少有一个节点。

示例 1:

img

输入: root = [2,1,3]
输出: 1

示例 2:

img

输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7

提示:

  • 二叉树的节点个数的范围是 [1,10^4]
  • -2^31 <= Node.val <= 2^31 - 1

层序遍历+队列法

联想 199.二叉树的右视图 题,可以知道这个题最容易想到的做法就是直接层序遍历,遍历到最后一层的时候,把最后一层的第一个节点输出即可。

代码展示

java
public List<List<Integer>> levelOrder(TreeNode root) {
    int result = 0;
    Deque<TreeNode> queue = new LinkedList<>();
    // 根节点入队
    queue.add(root);
    // BFS 循环
    while (!queue.isEmpty()) {
        int currentLayerSize = queue.size();
        // 这里一定要使用固定大小currentLayerSize,不要使用queue.size(),因为queue不停地出队入队,所以其大小是不断变化的
        for (int i = 0; i < currentLayerSize; i++) {
            TreeNode current = queue.poll();
            // 记录每一行的第一个元素
 			if (i == 0) {
                result = current.val;
            }
            if (current.left != null) {
                queue.add(current.left);
            }
            if (current.right != null) {
                queue.add(current.right);
            }
        }
    }
    return result;
}

时间复杂度:O(n),其中 n 是二叉树的节点数。每一个节点恰好被遍历一次。

空间复杂度:O(n),最差情况下,即当树为满二叉树时,最多有 (n+1)/2 个树节点 同时queue 中,故使用 O(n) 大小的额外空间。

总结

二叉树的层序遍历的队列迭代法需要牢记。