思路分析
沿用上一题“按之字形顺序打印二叉树”的思路,用两个队列实现分层,当一个队列空了意味着这一层遍历完了。
题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
Java代码:
import java.util.ArrayList;
import java.util.Queue;
import java.util.LinkedList;
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer> > res=new ArrayList<>();
Queue<TreeNode> que1=new LinkedList<>();
Queue<TreeNode> que2=new LinkedList<>();
que1.offer(pRoot);//Stack,Queue都能用isEmpty()判空
while(!que1.isEmpty()||!que2.isEmpty()){
ArrayList<Integer> tmp1=new ArrayList<Integer>();
ArrayList<Integer> tmp2=new ArrayList<Integer>();
while(!que1.isEmpty()){//队列为空,即遍历了一层结点
TreeNode node=que1.poll();
if(node!=null){
tmp1.add(node.val);
que2.offer(node.left);
que2.offer(node.right);
}
}
if(!tmp1.isEmpty()){
res.add(tmp1);
}
while(!que2.isEmpty()){
TreeNode node=que2.poll();
if(node!=null){
tmp2.add(node.val);
que1.offer(node.left);
que1.offer(node.right);
}
}
if(!tmp2.isEmpty()){
res.add(tmp2);
}
}
return res;
}
}