二叉树按层打印,每层独占一行输出
要求:
即每层单独输出一行,每层从左到右输出。
思路一:首先定义两个变量,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一直变化,达不到这种要求,该怎么办??
求帮助~~~!
jeyfang