二进制搜索树toString Java
我已经为BST实现了二进制搜索树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
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)俬俬俬)