题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路
该题和按照之字形打印二叉树差不多,需要每一层输出一行,也就是每一层需要输出一个list,那么需要两个队列进行合作,一个队列出队(保存上一层节点),一个队列入队(保存前一个队列的左右节点,即下一层节点),只不过该题和按照之字形二叉树打印的区别在于,之字形二叉树需要区分奇数层和偶数层,那么就需要两个队列保存左右节点的顺序不一样,上一个队列先保存左节点,再保存右节点;下一个队列先保存右节点,再保存左节点。
代码
import java.util.ArrayList;
import java.util.LinkedList;
public class Print1 {
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
if(pRoot == null) return list;
LinkedList<TreeNode> queue1 = new LinkedList<>();
LinkedList<TreeNode> queue2 = new LinkedList<>();
queue1.add(pRoot);
while (!queue1.isEmpty() || !queue2.isEmpty()){
if(!queue1.isEmpty()){
ArrayList<Integer> subList = new ArrayList<>();
while (!queue1.isEmpty()){
TreeNode curNode = queue1.pollFirst();
subList.add(curNode.val);
if(curNode.left != null){
queue2.add(curNode.left);
}
if(curNode.right != null){
queue2.add(curNode.right);
}
}
list.add(subList);
}else {
ArrayList<Integer> subList1 = new ArrayList<>();
while (!queue2.isEmpty()){
TreeNode curNode = queue2.pollFirst();
subList1.add(curNode.val);
if(curNode.left != null){
queue1.add(curNode.left);
}
if(curNode.right != null){
queue1.add(curNode.right);
}
}
list.add(subList1);
}
}
return list;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。