请帮我修复我的代码。
对于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(", {}");
}
谢谢!!
代码在递归调用自身之前添加{
,但在返回时不添加}
。这适用于两个递归调用。
此外,您的代码无条件地追加< code >,{},即使对于非空树也是如此。
相反,编写你的递归方法来完全按照你说的做:
不要让调用者在值周围添加< code>{ }
,因为这将重复逻辑(DRY:不要重复)。
预期的输出还显示,叶节点应该格式化为< code>{value,{},{}},而不是< code>{value},这是您的代码对那些额外的< code>if语句所做的。
还有,不要用< code>StringBuffer,用< code>StringBuilder,递归方法可以是< code>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('}');
}
如果您让递归方法返回< code>StringBuilder,如果您喜欢压缩代码,您的代码会变得更小。在功能或性能方面没有区别。如果你翻转参数,读起来会更好。
@Override
public String toString() {
return toString(new StringBuilder(), this.root).toString();
}
private static <T> StringBuilder toString(StringBuilder string, BSTNode<T> node) {
string.append('{');
if (node != null) {
string.append(node.getData());
toString(string.append(", "), node.getLeft());
toString(string.append(", "), node.getRight());
}
return string.append('}');
}
主要内容:什么是二叉排序树?,使用二叉排序树查找关键字,二叉排序树中插入关键字,二叉排序树中删除关键字,总结前几节介绍的都是有关静态 查找表的相关知识,从本节开始介绍另外一种查找表—— 动态查找表。 动态查找表中做查找操作时,若查找成功可以对其进行删除;如果查找失败,即表中无该关键字,可以将该关键字插入到表中。 动态查找表的表示方式有多种,本节介绍一种使用树结构表示动态查找表的实现方法—— 二叉排序树(又称为 “二叉查找树”)。 什么是二叉排序树? 二叉排序树要么是空 二叉树,要么具有如下特点:
我正在努力实现二叉搜索树。完成实现所需的功能之一是重新平衡功能。 根据规范,该功能的工作方式如下: rebalance() 方法应创建一个平衡树,从而将偏度降低为零。平衡树是指在整个树中,左子树和右子树的大小相差不超过1(即,每个子树也是平衡的)。 为了平衡树,rebalance() 方法应反复将根值移动到较小的子树,并将最小/最大值从较大的子树移动到根,直到树平衡。然后,它应该以递归方式平衡两个
我很难按我教授想要的格式打印出一个二叉搜索树。 他的格式是这样的: 我的代码:
我们已经看到了两种不同的方法来获取集合中的键值对。回想一下,这些集合实现了 map 抽象数据类型。我们讨论的 map ADT 的两个实现是在列表和哈希表上的二分搜索。在本节中,我们将研究二叉查找树作为从键映射到值的另一种方法。 在这种情况下,我们对树中项的确切位置不感兴趣,但我们有兴趣使用二叉树结构来提供高效的搜索。
我正在尝试用单词构建二叉搜索树。然而,当我使用上面的代码时,我只能访问我的根,根的左、右子项似乎为空。 法典:
我试图使用队列的链表实现实现二叉搜索树的级别顺序遍历。 我已经检查了二叉查找树的实现,它是好的。队列的链表实现也是正确的。在这里,我试图访问节点并将其子节点排队。然后使用弹出函数实际访问节点。 这最终是通过递归调用完成的。当我运行以下代码时,我以不同的顺序获得输出。