我正在编写自定义二进制搜索树类,由于某种原因,分配给节点的值总是丢失。这是我的方法。
private void add(TreeNode node, int a) {
if(node==null) {
System.out.println("node=null");
node = new TreeNode(a);
}else {
if(a<node.value) {
System.out.println("root > value "+"root: "+node.value+"value: "+a);
add(node.left, a);
}else {
System.out.println("root < value "+"root: "+node.value+"value: "+a);
add(node.right, a);
}
}
}
//root is class data
public void add(int a) {
add(root, a);
}
当我运行它时,控制台屏幕总是输出node = null,第一个if语句永远不会检查false,这意味着值实际上永远不会分配给我的节点。我觉得参考文献丢失了,但我不知道在哪里。
答案 0 :(得分:1)
我看到的问题:
e.g。
if(a < node.value){
if(node.left == null){
//set the new left node
node.left = new TreeNode(a); //STOP CONDITION!
}else{
add(node.left, a); //Recurse left down the BST!
}
}
您正在使用递归,因此您需要有一个正确的停止条件。虽然你的代码确实在某个时刻停止了,但它实际上并没有做你想要的。为了正确,您需要确保设置新的子节点引用(在代码中上面暗示)。当您向左递归时,您将向BST传播新值,直到最终需要创建新的叶节点。当在树下递归时,应该发生类似的事情。
在您的情况下,您只传递左/右节点值,直到达到null,并且永远不会更新子节点引用。