我想使用公共方法在此BST
中插入,删除和打印字符串,而不是boolean
或void
- 所以我必须返回。
在我的插入方法中,我正在尝试检查null
以及树的左侧和右侧。如果标签和字符串之间的比较是< 0
,我将左侧设置为当前节点的值。对于右侧也一样。
我的问题是,在这种方法结束时我会返回什么?我对此部分感到困惑,在这种情况下我是否会回归自己?
return false;
答案 0 :(得分:0)
如果你想看看BST的强大实现,可以参考一下:
http://algs4.cs.princeton.edu/32bst/BST.java.html
另外,如果你想真正了解那里发生了什么以及为什么会这样,我建议你去那里寻找/阅读课程。
编辑:
嗯,首先,让我们在这里解决一些问题。
查看您的课程时,您声称每Node
个Tree
为Tree
。现在,这可能有意义,但使用Nodes
作为一组链接的private void addIterative(T item) {
if (root == null) {
root = new Node(item);
return;
}
Node parent = null;
Node node = root;
int cmp = 0;
while (node != null) {
cmp = item.compareTo(node.item);
if (cmp == 0) {
return;
} else if (cmp < 0) {
parent = node;
node = node.left;
} else {
parent = node;
node = node.right;
}
}
Node child = new Node(item);
if (cmp < 0) {
parent.left = child;
} else if (cmp > 0) {
parent.right = child;
}
}
的包装应该是一种更容易的方法。
用所谓的外行术语来说,你可以通过递归和迭代两种方式进行BST操作。我打算给你一个例子。
迭代版本:
private Node add(Node node, T item) {
if (node == null) {
return new Node(item);
}
int cmp = item.compareTo(node.item);
if (cmp == 0) {
// it already exists
} else if (cmp < 0) {
node.left = add(node.left, item);
} else {
node.right = add(node.right, item);
}
return node;
}
递归版:
Tree
在迭代版本中,您使用循环在树中移动,一旦找到添加节点的位置,您只需创建并链接它。
另一方面,递归版本就是自建。在每个插入上,您将刷新到该路径的链接,在树下。
所以,迭代 - 在while循环中移动树;递归 - 通过递归调用在树中移动。
您的示例让我相信您应该使用添加新元素的迭代版本。在这种情况下,您(我相信)只需要返回node.insert("1").insert("2");
的实例进行方法链接,因此您可以执行以下操作:
Node
我仍然建议你修改一下Tree
和{{1}}的方式,但是如果那不可能,那么我猜你需要以某种方式解决它。< / p>