【发布时间】:2015-07-20 10:24:47
【问题描述】:
我正在尝试编写一个小函数来将节点插入 BST。 “插入”功能正常工作。我将其更改为“insert2”,但它不起作用。我无法弄清楚为什么它不起作用。运行时“insert”和“insert2”有什么区别?
插入方法
public void insert(Node node, int x) {
if (x < node.val) {
if (node.left == null) node.left = new Node(x);
else insert(node.left, x);
} else {
if (node.right == null) node.right = new Node(x);
else insert(node.right, x);
}
}
insert2 方法
public void insert2(Node node, int x) {
if (node == null) {
node = new Node(x);
return;
}
if (x < node.val) insert2(node.left, x);
else insert2(node.right, x);
}
节点定义
public class Node {
int val;
Node left, right;
public Node (int _val) {
this.val = _val;
}
}
提前致谢。
【问题讨论】:
-
node是一个参考。当您分配给node.left时,您正在改变一个节点对象,当您将一个新节点分配给一个引用参数时,您已经创建了一个不附加到任何东西的新节点。它将在return之后被垃圾收集,因为在那之后没有对它的引用。 -
谢谢。您能否详细说明或向我推荐一些文档:)
标签: java recursion tree binary-tree binary-search-tree