具有二进制搜索树的Java返回语句逻辑

时间:2020-08-06 11:47:28

标签: java data-structures

我试图了解在第一个条件为true时,主insert方法上的return语句如何用空值替代所创建的节点。

 public void insert(int input){
        insert(root, input);
    }
}

public Node insert(Node node, int key) {
    if (node == null) {
        return new Node(key);
    } else if (node.key > key) {
        node.left = insert(node.left, key);
    } else if (node.key < key) {
        node.right = insert(node.right, key);
    } else {
        return node;
    }
}

我对return语句的工作方式的理解是,它停止一个函数并返回一个值。因此,在这种情况下,将使用键作为数据创建一个新节点,然后返回该节点。 return语句还有其他功能吗?

1 个答案:

答案 0 :(得分:0)

您的代码中有两个问题,这些问题一起可以解释为什么您在理解return的角色时遇到了麻烦。

  1. 您的insert(input)方法将忽略其insert(node, key)调用的返回值。这意味着,如果rootnull,则不会在其中插入任何内容
  2. 您的insert(node, key)方法未在所有代码路径上返回值。这意味着代码甚至无法编译,而且也不正确。

固定代码如下:

public void insert(int input) {
    root = insert(root, input); // 1
}

public Node insert(Node node, int key) {
    if (node == null) {
        return new Node(key);
    }

    if (node.key > key) {
        node.left = insert(node.left, key);
    } else if (node.key < key) {
        node.right = insert(node.right, key);
    }

    return node; // 2
}

这只是确保当前节点总是在插入之后(递归)返回,或者如果由于值已经存在而没有插入,则返回当前节点。

现在return逻辑应该有意义。