题目信息
示例1:
给定二叉树: [3,9,20,null,null,15,7],
返回:[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
| class Solution { public int[] levelOrder(TreeNode root) { if(root == null){ return new int[0]; } Queue<TreeNode> queue = new LinkedList<>(); queue.add(root); List<Integer> ans = new ArrayList<>(); while(!queue.isEmpty()){ TreeNode t = queue.poll(); ans.add(t.val); if(t.left != null){ queue.add(t.left); } if(t.right != null){ queue.add(t.right); } } int[] res = new int[ans.size()]; for(int i = 0; i < ans.size(); i++){ res[i] = ans.get(i); } 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 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| class Solution { List<List<Integer>> level = new ArrayList(); List<Integer> ans = new ArrayList<>(); public int[] levelOrder(TreeNode root) { if(root == null){ return new int[0]; } recur(root,0);
for(List<Integer> levels : level){ for(Integer x : levels){ ans.add(x); } }
int[] res = new int[ans.size()]; for(int i = 0; i < ans.size(); i++){ res[i] = ans.get(i); } return res; }
public void recur(TreeNode root,int k){ if(root != null){ if(level.size() <= k){ level.add(new ArrayList()); } level.get(k).add(root.val); recur(root.left,k+1); recur(root.right,k+1); } } }
|