打印二叉树节点

Print binary tree nodes

本文关键字:树节点 叉树 打印      更新时间:2023-10-16

我正在编程一个BinaryTree项目。我完成了所有(插入、删除、创建、查找),只有一个功能,即打印操作。我应该这样打印:

5
46
X557
XXX6XXX9

基本上打印所有节点,但如果节点为空,则打印X。我一直在想办法做到这一点,但我一直走到了死胡同。这会是一种无序遍历吗??感谢

在遍历一个级别时,使用级别顺序遍历(广度优先搜索)打印每个节点,在每个级别的末尾都有一行换行符。

你可以在这里找到BFS伪代码

您可以使用BFS,但需要稍作修改:

在简单的BFS中,访问一个节点后,将其子节点添加到队列中。如果没有孩子,则不添加任何内容。

对于您的问题,如果访问的节点没有子节点,请将一个特殊节点添加到队列中,其值为"x",这样它将相应地在输出中打印"x"。在每个级别后打印一行换行符。

正如Dream Lane所说,BFS将在这里工作。我在这里提供了我自己的JAVA实现供您参考。

public static void printBST(Node root) {
    // empty tree
    if (root == null)
        return;
    Queue<Node> que = new LinkedList<Node>();
    que.add(root);
    boolean allChildNull = false;// end condition
    while (que.size() > 0 && !allChildNull) {
        allChildNull = true;
        Queue<Node> childQue = new LinkedList<Node>();
        for (Node n : que) {
            // print out noe value, X for null
            if (n == null)
                System.out.printf("%1$s", "X");
            else
                System.out.printf("%1$s", n.value);
            // add next level child nodes
            if (n == null) {
                childQue.add(null);
                childQue.add(null);
            } else {
                childQue.add(n.left);
                childQue.add(n.right);
                if (n.left != null || n.right != null)
                    allChildNull = false;
            }
        }
        System.out.printf("n");// newline
        que = childQue;
    }
}