Java 二进制搜索树字符串插入/删除/打印
我想使用公共方法在这个BST中插入、删除和打印字符串,而不是布尔值或void-因此我必须返回 在我的insert方法中,我试图检查null以及树的左侧和右侧。如果标签和字符串之间的比较小于0,我将左设置为当前节点的值。右边也一样 我的问题是,在这个方法结束时我返回什么?我对这一部分感到困惑,在这种情况下,我还需要自己吗Java 二进制搜索树字符串插入/删除/打印,java,math,binary-search-tree,Java,Math,Binary Search Tree,我想使用公共方法在这个BST中插入、删除和打印字符串,而不是布尔值或void-因此我必须返回 在我的insert方法中,我试图检查null以及树的左侧和右侧。如果标签和字符串之间的比较小于0,我将左设置为当前节点的值。右边也一样 我的问题是,在这个方法结束时我返回什么?我对这一部分感到困惑,在这种情况下,我还需要自己吗 return false; 如果您想了解BST的健壮实现,这里有一个: 另外,如果你想真正了解那里发生了什么以及为什么,我建议你也去那里看看/阅读课程 编辑: 首先,让我们来讨
return false;
如果您想了解BST的健壮实现,这里有一个: 另外,如果你想真正了解那里发生了什么以及为什么,我建议你也去那里看看/阅读课程 编辑: 首先,让我们来讨论几个问题 看看你的类,你正在声明每个节点都是一棵树。现在,这可能是有道理的,但使用树作为一组链接节点的包装器应该是一种更容易的方法 用外行术语来说,可以用递归和迭代两种方式进行BST操作。我将给你们每个例子 迭代版本:
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;
}
}
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;
}
我仍然建议您修改查看节点和树的方式,但如果这不可能,那么我想您需要以某种方式解决它。请被否决的投票人发表意见好吗?我不知道您为什么被否决,但是发布充满编译问题的代码并问一些模糊的问题:这就足够了。这是我在stackoverflow上发布它的唯一原因,而且我非常清楚stackoverflow的意义。@laune你现在可以检查更新的部分了吗?谢谢,我一直在使用它。注意,更新后的questionElem是一个字符串,而我给你的示例是用T参数化的,这意味着您可以将T视为Stringt,但您还包括一个辅助节点变量node我可以在代码中使用上面的节点吗?您的BST实现使我得出结论,这意味着您可以以迭代方式添加元素,然后返回树的实例以进行方法链接。所以,如果这就是它所需要的,那么在最后你应该返回它。如果cmp==0,为什么要在这里检查null{
node.insert("1").insert("2");