尝试打印

时间:2015-11-10 19:11:02

标签: java binary-search-tree nodes pretty-print

我正在编写方法以按顺序打印二叉搜索树。我想出了一种方法,但它需要在打印时删除或取消节点。以下是我的代码:

public String printKeysInOrder() {
        String output = "";
        if (isEmpty()) return "()";
        else{
            int i = 0;
            while(i!=size()){
                Node x = root;
                int loopBreak = 0;
                while(loopBreak!=1){
                    if(x.left != null) x = x.left;
                    else if (x.right != null){
                        output = output + " " + x.val;
                        x.key = null;
                        x = x.right;
                        i++;
                    }
                    else{
                        output = output + " " + x.val;
                        x.key = null;
                        loopBreak = 1;
                    }
                }
                i++;
            }
        }
        return output;
    }
树的

            _7_
          /     \
        _3_      8
      /     \
     1       6
      \     /
       2   4
            \
             5

应打印“1 2 3 4 5 6 7 8”

代码以一种有利于向左移动直到它不能再向左移动的方式工作,然后它将该节点的值存储在字符串输出中,使得节点键等于null(如此将来的迭代循环不要沿着那个树向下移动)并尽可能向右移动或在循环中循环。

虽然我在制作它时遇到了麻烦,所以节点等于null,就像执行代码时一样(通过junit测试),代码无法识别该空键并且仍然通过该子树?任何人都可以帮我或者告诉我如何制作它,以便将来迭代的x.left和x.right指针将节点识别为null?

1 个答案:

答案 0 :(得分:1)

您无需取消或删除需要遍历算法的节点。

此处提供的有序遍历应该无需重大修改即可运行: http://www.javabeat.net/binary-search-tree-traversal-java/

另一种面向对象的方法是提供给有序遍历的访问者,它允许您提供在每个节点执行的操作,无论是打印,收集,映射还是其他东西。