【LeetCode】102 - 二叉树的层序遍历
题目描述
给你二叉树的根节点 root,返回其节点值的层序遍历(即逐层地,从左到右访问所有节点)。
解题思路
使用 BFS(广度优先搜索)的思想,维护当前层的所有节点,逐层处理:
- 将根节点加入当前层节点列表
- 遍历当前层所有节点,收集它们的值
- 收集当前层所有节点的子节点作为下一层
- 重复步骤2-3直到没有下一层
核心代码
public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> result = new ArrayList<>();if (root == null) {return result;}List<TreeNode> currentRowNodeList = new ArrayList<>();currentRowNodeList.add(root);while (true) {// 收集当前层的值List<Integer> currentRowValList = new ArrayList<>();for (TreeNode node : currentRowNodeList) {currentRowValList.add(node.val);}result.add(currentRowValList);// 收集下一层节点List<TreeNode> nextNodeList = new ArrayList<>();for (TreeNode treeNode : currentRowNodeList) {if (treeNode.left != null) {nextNodeList.add(treeNode.left);}if (treeNode.right != null) {nextNodeList.add(treeNode.right);}}if (nextNodeList.isEmpty()) {break;}currentRowNodeList = nextNodeList;}return result;
}
复杂度分析
- 时间复杂度: O(n),n 为二叉树节点数,每个节点访问一次
- 空间复杂度: O(n),最坏情况下需要存储一层的所有节点
示例验证
输入:[3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
算法按层级正确遍历,符合预期结果。