把二叉树打印出多行

来源:互联网 发布:杜兰特对伦纳德数据 编辑:程序博客网 时间:2024/05/15 00:48

题目

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

解题思路

用一个队列来保存将要打印的结点。为了把二叉树的每一行单独打印到一行里,我们需要两个变量:一个变量表示在当前的层中还没有打印的结点数,另一个变量表示下一次结点的数目。

    public static void print(BinaryTreeNode root) {        if (root == null) {            return;        }        List<BinaryTreeNode> list = new LinkedList<>();        BinaryTreeNode node;        // 当前层的结点个数        int current = 1;        // 记录下一层的结点个数        int next = 0;        list.add(root);        while (list.size() > 0) {            node = list.remove(0);            current--;            System.out.printf("%-3d", node.val);            if (node.left != null) {                list.add(node.left);                next++;            }            if (node.right != null) {                list.add(node.right);                next++;            }            if (current ==0) {                System.out.println();                current = next;                next = 0;            }        }    }
0 0