【问题标题】:Issues with binary search tree二叉搜索树的问题
【发布时间】:2020-07-28 11:29:03
【问题描述】:

我需要一些帮助来解释为什么 bst 中的插入对以下代码不起作用。关于java如何传递我不知道的参数有一些概念吗?

 public void insert(int input){
        insert(root, input);
}
private void insert(Node node, int input){
    Node new_node = new Node(input);
    if (node == null) {
        node = new_node;
        }
    else if (input == node.data) {
        System.out.println("input exists");
        }
    else {
        if (input < node.data) {
            insert(node.left, input);
        }
        else{
            insert(node.right, input);
        }
    }
}

【问题讨论】:

  • 参数Node node是一个局部变量。重新分配不会有效果。 Java 是按值调用的。
  • 你也给null赋值,它就像一个浮动节点,不附加任何东西。
  • 谢谢@f1sh,这真的很有帮助

标签: java data-structures


【解决方案1】:

重新分配参数node 不会改变您传递给方法的任何内容(node.leftnode.right):

node = new_node;

因为node 存储了对Node 对象(您要替换的对象)的引用。赋值仅更改引用,使其引用另一个对象。请参阅this 了解更多信息。

您可以改为重新分配 node.leftnode.right

Node new_node = new Node(input);
if (input == node.data) {
    System.out.println("input exists");
} else if (input < node.data) {
    if (node.left != null) {
        insert(node.left, input);
    } else {
        node.left = new_node;
    }
}
else{
    if (node.right != null) {
        insert(node.right, input);
    } else {
        node.right = new_node;
    }
}

【讨论】:

  • 谢谢,这真的很有帮助
【解决方案2】:

尝试像这样在 BST 中插入

    public void insert(int val) {
        root = put(root, val);
    }

    private Node insert(Node node, int val) {
        if (node == null)
            return new Node(val);
        int cmp = Integer.valueOf(val).compareTo(node.data);
        if (cmp < 0)
            node.left = insert(node.left, val);
        else if (cmp > 0)
            node.right = insert(node.right, val);
        else
            node.data = val;
        return node;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多