剑指offer54--二叉树的多行打印

来源:互联网 发布:哪个走路软件可以赚钱 编辑:程序博客网 时间:2024/05/21 09:20


一、题目


题目:从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印一行。



二、思想




(1)首先要建立一个队列,LinkedList这个类是实现了队列的接口的,所以我们可以使用它来建立一个队列

(2)建立两个标志位,一个current表示当前层的个数,一个next表示下一层的个数

(3)每打印一个数,current减一,当current为零的时候,换到下一行,也就是current = next



三、程序



package 剑指offer;import java.util.LinkedList;import java.util.Queue;class BinaryTreeNodePrint{int value;BinaryTreeNodePrint left;BinaryTreeNodePrint right;BinaryTreeNodePrint(int value){this.value = value;}public String toString(){return value+"  ";}}public class Test60 {// 逐行进行打印public static void printByLine(BinaryTreeNodePrint head){if(head == null){System.out.println("Error");}int current = 1;int next = 0;// 使用队列的方式,先入先出Queue<BinaryTreeNodePrint> queue = new LinkedList<BinaryTreeNodePrint>();BinaryTreeNodePrint node;queue.offer(head);while(queue.size() > 0){//这用当弹出current个数的时候才会输出下一轮node = queue.poll();current--;System.out.print(node);// 分别将当前结点的左右孩子入队列,并标明这是下一行要打印的结点if(node.left != null){queue.offer(node.left);next++;}if(node.right != null){queue.offer(node.right);next++;}// 标明此时这行的结点打印完了,要换到下一行了            if (current ==0) {                System.out.println();                current = next;                next = 0;            }}}    private static void assemble(BinaryTreeNodePrint n1,    BinaryTreeNodePrint n2,    BinaryTreeNodePrint n3) {    n1.left = n2;    n1.right = n3;    }public static void main(String args[]){BinaryTreeNodePrint n1 = new BinaryTreeNodePrint(1);BinaryTreeNodePrint n2 = new BinaryTreeNodePrint(2);BinaryTreeNodePrint n3 = new BinaryTreeNodePrint(3);BinaryTreeNodePrint n4 = new BinaryTreeNodePrint(4);BinaryTreeNodePrint n5 = new BinaryTreeNodePrint(5);BinaryTreeNodePrint n6 = new BinaryTreeNodePrint(6);BinaryTreeNodePrint n7 = new BinaryTreeNodePrint(7);assemble(n1, n2, n3);assemble(n2, n4, n5);assemble(n3, n6, n7);printByLine(n1);}}

--------------------------output---------------------------
1  2  3  4  5  6  7  



1 0
原创粉丝点击