树与图中等1 种解法
#513找树左下角的值
返回二叉树最深一层最左侧节点的值。
#二叉树#广度优先搜索
原题
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
示例 1:
输入: root = [2,1,3] 输出: 1
示例 2:
输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7
提示:
- 二叉树的节点个数的范围是
[1,104] -231 <= Node.val <= 231 - 1
解题主线
- 层序遍历时记录每层第一个节点,最后一次记录即答案。
解法 1:BFS 记录层首
每层第一个出队节点覆盖答案。
-
时间复杂度: O(n)
-
空间复杂度: O(w)
import java.util.*;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
class Solution {
public int findBottomLeftValue(TreeNode root) {
if (root == null) throw new IllegalArgumentException("root must not be null");
Deque<TreeNode> queue = new ArrayDeque<>();
queue.offer(root);
int answer = root.val;
while (!queue.isEmpty()) {
// size 固定当前层节点数,后续入队的子节点不会混入本层扫描。
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
// 每层第一个出队节点最靠左,逐层覆盖后留下的就是最深层答案。
if (i == 0) answer = node.val;
if (node.left != null) queue.offer(node.left);
if (node.right != null) queue.offer(node.right);
}
}
return answer;
}
}边界与易错点
- 题目保证根非空;通用方法对空树应显式拒绝,不能静默返回 0。
整理来源
由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。
leetcode/src/main/java/tree/Q513_findBottomLeftValue.java