从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路:队列LinkedList完成层序遍历,用last记录每层最后一个结点
public class shu {
public static void main(String[] args) {
//把二叉树打印成多行
//从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
TreeNode tn = new TreeNode(4);
TreeNode tn1 = new TreeNode(5);
TreeNode tn2 = new TreeNode(6);
TreeNode tn3 = new TreeNode(7);
TreeNode tn4 = new TreeNode(8);
TreeNode tn5 = new TreeNode(9);
TreeNode tn6 = new TreeNode(10);
tn.left = tn1;
tn.right = tn2;
tn1.left=tn3;
tn1.right=tn4;
tn2.left=tn5;
tn2.right=tn6;
shu s = new shu();
System.out.println(s.Print(tn));
}
ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> list1 = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> list2 = new ArrayList<>();
if(pRoot==null){
return list1;
}
TreeNode p = pRoot;
TreeNode last=pRoot;
Deque<TreeNode> queue = new LinkedList<TreeNode>();
queue.addLast(p);
while(queue.size()!=0){
p=queue.peekFirst();
list2.add(p.val);
queue.removeFirst();
if(p.left != null){
queue.addLast(p.left);
}
if(p.right != null){
queue.addLast(p.right);
}
if(p==last){
list1.add(list2);
if(queue.size()!=0){
last=queue.getLast();
list2 = new ArrayList<Integer>(); //注意这里不是清空list2 !!!!!
}
}
}
return list1;
}
}