Java 二进制搜索树字符串插入/删除/打印

Java 二进制搜索树字符串插入/删除/打印,java,math,binary-search-tree,Java,Math,Binary Search Tree,我想使用公共方法在这个BST中插入、删除和打印字符串,而不是布尔值或void-因此我必须返回 在我的insert方法中,我试图检查null以及树的左侧和右侧。如果标签和字符串之间的比较小于0,我将左设置为当前节点的值。右边也一样 我的问题是,在这个方法结束时我返回什么?我对这一部分感到困惑,在这种情况下,我还需要自己吗 return false; 如果您想了解BST的健壮实现,这里有一个: 另外,如果你想真正了解那里发生了什么以及为什么,我建议你也去那里看看/阅读课程 编辑: 首先,让我们来讨

我想使用公共方法在这个BST中插入、删除和打印字符串,而不是布尔值或void-因此我必须返回

在我的insert方法中,我试图检查null以及树的左侧和右侧。如果标签和字符串之间的比较小于0,我将左设置为当前节点的值。右边也一样

我的问题是,在这个方法结束时我返回什么?我对这一部分感到困惑,在这种情况下,我还需要自己吗

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");