【发布时间】:2020-08-06 20:09:37
【问题描述】:
我试图了解当第一个条件为真时,主插入方法上的 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 语句还有其他作用吗?
【问题讨论】:
-
此代码看起来不正确。可能还应该有一个
root = ...来实际更改树并真正插入节点。现在的代码确实只是生成一个新节点并将其返回,但从未将其添加到任何内容中。树没有改变,因此插入基本上没有做任何有意义的事情。此外,它在其他分支中缺少return语句。确定是要退货吗?我不这么认为。 -
这段代码能编译吗?您对
return的理解似乎是正确的,但else if和else分支也应该有return语句,而它们没有。 -
除此之外它不会编译,因为它缺少返回语句,如果
root已经存在,那么这会在你的树中添加一个节点,但如果root不存在,这个什么都不做。 -
补充一点:
root最初很可能是null,因此root = insert(root, input);才有意义,但前提是insert(Node node, int key)在除node == null之外的所有情况下都返回node。在当前状态下,即使在编辑之后,代码也不会编译,因为 所有 路径需要返回一个值(或抛出异常)。 -
谢谢@Thomas,我知道了仍然会出现编译错误。我最后的 return 语句应该在 if else 块之后,我的错。但我的困惑源于 return 语句如何将 null 值(即当 root 为 null 时)替换为创建的节点而无需任何形式的赋值
标签: java data-structures