你好
我是Java新手,我有一个问题,不知是否有人可以帮助我?
我有以下代码要插入到二叉树中:
public void insert(int data) {
root = insert (root,data);
}
/* recursive helper */
private Node insert(Node node, int data) {
if (node == null)
node = new Node(data);
else if (data < node.data)
node.left = insert(node.left, data);
else
node.right = insert(node.right, data);
return (node);
}
我浏览了这段代码,发现当最后插入(Node-Node,int-data)时
从递归返回,它返回了刚创建的节点,因此
替换了“根”的值。但是当我在
打印出“根”的“数据”,我看到“根”中的“数据”从未改变
正确(和预期结果)。
我想知道是否有人能告诉我为什么“根”的值在
每次调用insert(Node-Node,int-data)时,它都返回一个新的“Node”。
提前非常感谢您,
秋野
3条答案
按热度按时间7lrncoxx1#
理解为什么这个问题不起作用的关键是知道Java将对象作为引用传递,而这些引用是通过值传递的。
在对“节点插入(节点节点,整数数据)”的第一个函数调用中;
节点是根的副本,对节点所做的任何更改只影响临时节点变量。
根不受影响。
http://stackoverflow.com/questions/4...-pass-by-value
uqdfh47h2#
此外,您需要将节点向左或向右移动以使递归工作。
6jygbczu3#
尝试以下代码
程序输出