题目信息
示例1:
给定二叉树: [3,9,20,null,null,15,7]
,
返回其层次遍历结果:
1 2 3 4 5
| [ [3], [9,20], [15,7] ]
|
提示
解题思路
本题难点
题目要求的二叉树的 从上至下 打印(即按层打印),又称为二叉树的 广度优先搜索(BFS)
具体思路
BFS 通常借助 队列 的先入先出特性来实现。
- 每层打印到一行:将本层全部节点打印到一行,并将下一层全部节点加入队列,以此类推,即可分为多行打印。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| class Solution { public List<List<Integer>> levelOrder(TreeNode root) { if(root == null){ return new ArrayList<>(0); } List<List<Integer>> res = new ArrayList<>(); Queue<TreeNode> queue = new LinkedList<>(); queue.add(root); while(!queue.isEmpty()){ List<Integer> ans = new ArrayList<>(); for(int i = queue.size(); i > 0; i--){ TreeNode t = queue.poll(); ans.add(t.val); if(t.left != null){ queue.add(t.left); } if(t.right != null){ queue.add(t.right); } } res.add(ans); } return res; } }
|
复杂度分析:
- 时间复杂度 O(N) :N 为二叉树的节点数量,即 BFS 需循环 N 次。
- 空间复杂度 O(N) : 最差情况下,即当树为平衡二叉树时,最多有 N/2 个树节点同时在 队列queue 中,使用 O(N) 大小的额外空间。
其他优秀解答
解题思路
一般在树相关的题目中都可以考虑递归解法
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class Solution { List<List<Integer>> res = new ArrayList(); public List<List<Integer>> levelOrder(TreeNode root){ recur(root,0); return res; } public void recur(TreeNode root,int k){ if(root != null){ if(res.size() <= k){ res.add(new ArrayList()); } res.get(k).add(root.val); recur(root.left,k+1); recur(root.right,k+1); } } }
|