我试图了解在第一个条件为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语句还有其他功能吗?
答案 0 :(得分:0)
您的代码中有两个问题,这些问题一起可以解释为什么您在理解return
的角色时遇到了麻烦。
insert(input)
方法将忽略其insert(node, key)
调用的返回值。这意味着,如果root
为null
,则不会在其中插入任何内容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
逻辑应该有意义。