二进制搜索树toString Java

时间:2017-01-26 17:45:24

标签: java binary-search-tree tostring

我已经为BST实现了toString方法,但看起来有效,但不稳定。 例如 对于这棵树toString工作正常: correct 但对于这个,这是错的 wrong

任何人都可以帮忙,发生了什么事?

@Override
    public String toString() {
        return "(" + toStringB(new StringBuilder(), root()).toString() + ")";
    }

    private StringBuilder toStringB(StringBuilder string, Node<E> node) {
        if (node != null) {
            string.append(node.getElement());
            if (left(node) != null) {
                toStringB(string.append(" ("), left(node));
            }
            if (right(node) != null) {
                toStringB(string.append(", "), right(node));
                string.append(')');
            }
        }
        return string;
    }

1 个答案:

答案 0 :(得分:0)

你的问题在于:

        if (left(node) != null) {
            toStringB(string.append(" ("), left(node));
        }
        if (right(node) != null) {
            toStringB(string.append(", "), right(node));
            string.append(')');
        }

如果您有一个左节点但没有正确的节点,则会追加(left。如果您有一个没有左节点的正确节点,则会追加, right)。这会为您提供不正确匹配的括号和迷路逗号。

我想指出,你的&#34;工作正常&#34;示例实际上也不正确:

  

(10(7(3(2,5),9),10,30(11(10)))

让我们隐藏7和30下的节点:

  

(10(7(...),10,30(......))

您的根节点10有3个孩子71030。这不是二叉树!

哦,还有不平衡的括号。