请帮我修改我的代码。
对于toString
方法,字符串应格式化为
{currentData, leftSubtree, rightSubtree}
空树应返回一组空括号{}
。
我正在接受Junit测试:
Expected: {5, {0, {-5, {}, {}}, {3, {}, {}}}, {10, {7, {}, {}}, {13, {}, {}}}}
Actual: {5, {0, {-5, {}, {3, {}, {}, {10, {7, {}, {13, {}, {}, {}}
这是我的代码:
public String toString() {
StringBuffer string = new StringBuffer("{");
toString(root, string);
string.append("}");
return string.toString();
}
private void toString(BSTNode<T> node, StringBuffer string) {
if (node != null) {
string.append(node.getData());
if (node.getLeft() != null) {
string.append(", " + "{");
toString(node.getLeft(), string);
}
if (node.getRight() != null) {
string.append(", " + "{");
toString(node.getRight(), string);
}
}
string.append(", {}");
}
谢谢!
答案 0 :(得分:3)
您的代码在递归调用之前添加A = [5,6]
,但在返回时不添加{
。这适用于两个递归调用。
此外,您的代码无条件地附加}
,即使对于非空树也是如此。
相反,写下你的递归方法来完全按照你的说法完成:
, {}
{currentData, leftSubtree, rightSubtree}
不要让调用者的工作在值周围添加{}
{
,因为这会复制逻辑(DRY:不要重复自己)。
预期输出还显示叶节点的格式应为}
,而不是{value, {}, {}}
,这是您的代码对这些额外的{value}
语句所做的。
另外,请勿使用if
,使用StringBuffer
,递归方法可以是StringBuilder
。
static
如果你让递归方法返回@Override
public String toString() {
StringBuilder string = new StringBuilder();
toString(this.root, string);
return string.toString();
}
private static <T> void toString(BSTNode<T> node, StringBuilder string) {
string.append('{');
if (node != null) {
string.append(node.getData());
string.append(", ");
toString(node.getLeft(), string);
string.append(", ");
toString(node.getRight(), string);
}
string.append('}');
}
,你的代码会变小,如果你想缩小代码。在功能或性能方面没有区别。如果翻转参数,读数会更好。
StringBuilder