首页 > 其他 > 详细

二叉树按层打印,每层独占一行输出

时间:2016-03-14 13:40:27      阅读:370      评论:0      收藏:0      [点我收藏+]

要求:

技术分享

即每层单独输出一行,每层从左到右输出。

思路一:首先定义两个变量,current和next,分别表示为当前输出行的节点数,next表示下一行的节点数。

current为1,即头节点,然后节点1的左右孩子分别加入则next++,则为2,当每输出一个节点时,current--,则1 输出,current为0,则表示当前行输出完毕,换行,然后current为next,然后next重置为0,继续下一行输出。当然输出用到了队列。

思路一算法如下:

 1 public void LayerPrint(Node node){
 2             int current,next=0;
 3             Queue<Node> queue=new LinkedList();
 4             queue.offer(node);
 5             current=1;
 6             while(!queue.isEmpty()){
 7                 Node peek=queue.poll();            //移除队首并返回移除的节点给peek
 8                 current--;
 9                 System.out.print(peek.data +"");
10                 if(peek.leftChild!=null){
11                     queue.offer(peek.leftChild);
12                     next++;
13                 }
14                 if(peek.rightChild!=null){
15                     queue.offer(peek.rightChild);
16                     next++;
17                 }
18                 if(current==0){
19                     System.out.println();
20                     current=next;
21                     next=0;
22                 }
23             }
24         }

思路二:同样需要两个变量last和nlast,last表示为当前行的最右节点,nlast表示下一行的已经发现的最右节点,即每次最新加入的节点。举例如下:

开始时:令last为1节点,然后1进入队列,并输出打印,然后1的左孩子节点进入,令nlast为2,然后有孩子节点进入,令nlast为3。

技术分享

然后:队首节点弹出,即是1,发现与last相等,则说明已经到了该层最右节点,则需要换行,然后令last为此时的nlast,即last为3节点,为下一层的最右节点。这样依次向下输出循环。

技术分享

技术分享

弹出的3节点与last相等,说明又该换行了。

技术分享

问题:在令换行后,令last=nlast,但是nlast一直变化(因为它们均是对象),所以结果last不能固定,也跟着nlast一直变化,达不到这种要求,该怎么办??

求帮助~~~!

二叉树按层打印,每层独占一行输出

原文:http://www.cnblogs.com/jeyfang/p/5275224.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!