题目
从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行。
样例
算法
BFS(O(n))
依旧是宽度优先遍历,相比不分行从上到下打印,只需要记住这一层需要弹出队列多少次数即可,对应代码里面的n。
- 当队列不为空时
- 记录下当前队列的长度n,这个长度对应树的当前层有多少个节点
- 相比较上一题,这次在一个循环里面,只弹出n个节点就好了。弹出过程中存储当前节点到temp数组
- 弹出n个节点之后,将temp数组存入result
时间复杂度
每个节点遍历1遍,O(N)复杂度
class Solution {
public List<List<Integer>> printFromTopToBottom(TreeNode root) {
List<List<Integer>> res = new ArrayList();
Queue<TreeNode> q = new LinkedList();
if(root == null) return res;
q.offer(root);
while(q.size() != 0){
List<Integer> list = new ArrayList();
for(int i = 0,n = q.size();i < n;i++){
TreeNode tmp = q.peek();
q.poll();
list.add(tmp.val);
if(tmp.left != null){
q.offer(tmp.left);
}
if(tmp.right != null){
q.offer(tmp.right);
}
}
res.add(list);
}
return res;
}
}