【问题标题】:Print binary tree nodes打印二叉树节点
【发布时间】:2012-04-15 12:20:26
【问题描述】:

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

5
46
X557
XXX6XXX9

基本上打印所有节点,但如果节点为空则打印 X。我一直在试图弄清楚如何做到这一点,但我一直陷入死胡同。这会类似于中序遍历吗?谢谢

【问题讨论】:

  • 听起来您想要广度优先搜索。
  • 为什么二叉树会有空节点?我的理解是,当节点(或值、项)被删除时,树会被重组以消除空节点。

标签: c++ data-structures recursion binary-tree


【解决方案1】:

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

可以找到BFS伪代码here

【讨论】:

  • 如果节点为空,只需执行 BFS 就不会打印 X。
【解决方案2】:

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

在简单的 BFS 中,访问一个节点后,您将其子节点添加到队列中。如果没有孩子, 什么都没有添加。

对于您的问题,如果访问的节点没有子节点,请在队列中添加一个特殊节点,其值为“x”,以便它会在您的输出中相应地打印“X”。在每个级别之后打印一个换行符。

【讨论】:

    【解决方案3】:

    正如 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多