我尝试编写一个递归函数来将节点添加到二叉树中。
问题是,虽然根在插入第一个元素后有一个新值
(由 System.out.println() 确认),当我尝试通过 System.out.println() 获取 main 中的根值时,它仍然为空;
package polo;
public class BTNode {
public int value;
public BTNode left;
public BTNode right;
BTNode(int value){
this.value = value;
left = null;
right = null;
}
}
package polo;
public class Tree {
public BTNode root;
public Tree() {
root = null;
}
public void add(int i, BTNode n) {
if (n == null) {
n = new BTNode(i);
System.out.println("New root value : " + n.value);
} else {
if (i < n.value) {
if (n.left == null) {
n.left = new BTNode(i);
} else {
add(i, n.left);
}
} else { // i >= n.value
if (n.right == null) {
n.right = new BTNode(i);
} else {
add(i, n.right);
}
}
}
}
public static void main(String[] args) {
Tree t = new Tree();
t.add(3, t.root);
System.out.println(t.root.value);
}
}
命令行输出是:
New root value : 3
Exception in thread "main" java.lang.NullPointerException at polo.Tree.main(Tree.java:57)
(第 57 行是 System.out.println(t.root.value); 所在的位置)
最佳答案
Java 有引用,但没有对引用的引用。
当你有
public void add(int i, BTNode n) {
if (n == null) {
n = new BTNode(i); // alters the local variable n only.
基本上,add
不会改变 t.root。相反,您根本不应该传递 root
并让 add
方法处理它。
public void add(int i) {
if (root == null) {
root = new BTNode(i);
} else {
root.add(i);
}
}
关于java - 二叉树插入根始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32077266/