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

要求:

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

思路一:首先定义两个变量,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一直变化,达不到这种要求,该怎么办??

求帮助~~~!

posted @ 2016-03-14 12:09  jeyfang  阅读(1369)  评论(1编辑  收藏  举报