二进制搜索树添加方法引用丢失

时间:2016-05-18 23:06:24

标签: java reference binary-search-tree

我正在编写自定义二进制搜索树类,由于某种原因,分配给节点的值总是丢失。这是我的方法。

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,这意味着值实际上永远不会分配给我的节点。我觉得参考文献丢失了,但我不知道在哪里。

1 个答案:

答案 0 :(得分:1)

我看到的问题:

  1. 如果您需要在链接的代码中初始化根目录。您正在创建新节点,但如果需要,则永远不要设置根节点。 (提示:第一个插入需要设置root!,可能要在公共方法中检查这个)
  2. 当传递node.left / node.right时,您无法检查是否需要在必要时设置新的左/右子节点
  3. 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,并且永远不会更新子节点引用。