【发布时间】:2020-09-30 09:25:14
【问题描述】:
我编写了两个用于向树中添加新节点的函数:一个public 和一个private。私有的是递归的。公共的称为递归的。第一个问题:这是可以接受的做法吗?
public void addNode(int val) {
addNode(val, root, null, 0);
System.out.println("Root is null: " + (root == null));
}
private void addNode(int val, Node node, Node parent,int height) {
if(node == null) {
node = new Node(val, height, 0);
System.out.println("is new node equal to root?"+(node == root));
System.out.println("Added node on height: " + node.getHeight());
return;
}
height++;
addNode(val, node.left, node, height);
addNode(val, node.right, node, height);
}
现在问题来了:根变量没有被初始化。它在树类中声明。 public Node root;
这让我很困惑,因为我知道 Java 是按引用传递,而不是按值传递。为什么调用这些函数后root为空?
控制台输出:
is new node equal to root?false
Added node on height: 0
Root is null: true
【问题讨论】:
-
new Node(val, height, 0);中的第三个参数是什么? -
即大小(子树中节点的数量)@trincot
标签: java recursion tree nodes pass-by-reference