我已经为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;
}
答案 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个孩子7
,10
和30
。这不是二叉树!
哦,还有不平衡的括号。