二进制搜索树toString Java

二进制搜索树toString Java,java,binary-search-tree,tostring,Java,Binary Search Tree,Tostring,我已经为BST实现了toString方法,但看起来它可以工作,但不稳定。 例如 对于此树,toString工作正常: 但对于这一个,它是错误的 有人能帮忙吗,发生了什么事 @Override public String toString() { return "(" + toStringB(new StringBuilder(), root()).toString() + ")"; } private StringBuilder toStringB(S

我已经为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;
    }
@覆盖
公共字符串toString(){
返回“(“+toString(新的StringBuilder(),root()).toString()+”)”;
}
私有StringBuilder toStringB(StringBuilder字符串,节点){
如果(节点!=null){
append(node.getElement());
if(左(节点)!=null){
toString(string.append(“”,左(节点));
}
if(右(节点)!=null){
toString(string.append(“,”),右(节点));
追加(');
}
}
返回字符串;
}

您的问题在于:

        if (left(node) != null) {
            toStringB(string.append(" ("), left(node));
        }
        if (right(node) != null) {
            toStringB(string.append(", "), right(node));
            string.append(')');
        }
如果您有一个左节点,但没有右节点,您将追加
(左
。如果您有一个右节点,但没有左节点,您将追加
,右)
。这会给您不正确匹配的括号和多余的逗号

我想指出的是,您的“工作正常”示例实际上也不正确:

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

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

(10(7(…)、10、30(…)

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


哦,还有不平衡的括号。

你能给我们完整的代码让我们也可以运行它吗?哦,谢谢,我没有注意到这一点。你能帮我修复一下吗?如果你有一个左节点或右节点,请附加开括号。如果你有一个左节点,请附加它。如果你有一个左节点和右节点,请附加一个逗号。如果你有一个右节点,附加它。如果你有一个左或右节点,请附加一个右括号。哦,非常感谢你,现在它可以工作了!(10(5(3(2),9),10(30)(11(10)俬俬俬)