二叉搜索树 toString Java

Binary Search Tree toString Java

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

谁能帮忙,这是怎么回事?

@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;
    }

你的问题出在这里:

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

如果你有一个左节点,但没有右节点,你将追加(left。如果你有一个没有左节点的右节点,你将追加 , right)。这会给您不正确匹配的括号和杂散逗号。

我想指出,您的 "works fine" 示例实际上也不正确:

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

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

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

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

哦,还有不平衡的括号。