一,问题介绍
给定一棵二叉树,按照层序遍历的顺序打印二叉树。但是要求,每一行打印一层数据。
二,算法分析
借助二叉树的层序遍历来实现。但是需要额外两个变量。一个变量用来保存当前层 还未打印的结点个数,另一个变量保存下一层待打印的结点个数。
二叉树层序遍历参考:http://www.cnblogs.com/hapjin/p/5409921.html
层序打印参考:
1 public void printTree(BinaryNode<T> root){
2 if(root == null)
3 return;
4 Queue<BinaryNode<T>> queue = new LinkedList<>();
5
6 int current;//当前层 还未打印的结点个数
7 int next;//下一层结点个数
8
9 queue.offer(root);
10 current = 1;
11 next = 0;
12 while(!queue.isEmpty()){
13 BinaryNode<T> currentNode = queue.poll();
14 System.out.printf("%-4d", currentNode.element);
15 current--;
16
17 if(currentNode.left != null){
18 queue.offer(currentNode.left);
19 next++;
20 }
21 if(currentNode.right != null){
22 queue.offer(currentNode.right);
23 next++;
24 }
25 if(current ==0){
26 System.out.println();
27 current = next;
28 next = 0;
29 }
30 }
31 }
1 public void printTree(BinaryNode<T> root){
2 if(root == null)
3 return;
4 Queue<BinaryNode<T>> queue = new LinkedList<>();
5
6 int current;//当前层 还未打印的结点个数
7 int next;//下一层结点个数
8
9 queue.offer(root);
10 current = 1;
11 next = 0;
12 while(!queue.isEmpty()){
13 BinaryNode<T> currentNode = queue.poll();
14 System.out.printf("%-4d", currentNode.element);
15 current--;
16
17 if(currentNode.left != null){
18 queue.offer(currentNode.left);
19 next++;
20 }
21 if(currentNode.right != null){
22 queue.offer(currentNode.right);
23 next++;
24 }
25 if(current ==0){
26 System.out.println();
27 current = next;
28 next = 0;
29 }
30 }
31 }