递归地在Java中实现BST

时间:2016-03-21 02:12:02

标签: java recursion

我不知道为什么我需要再次分配node.left = insert(node.left, data),因为我已使用node = new BNode(data)分配了它。

private BNode insert(BNode node, int data) { 
    if (node == null) { 
       node = new BNode(data); 
    } 
   else if (node.data < data) { 
        node.left = insert(node.left, data); 
    } 
   else if (node.data > data) { 
        node.right = insert(node.right, data); 
    } 
    return node; 
}

1 个答案:

答案 0 :(得分:1)

在二进制搜索树中,您必须将任何新元素放在叶子中。您的代码通过检查我们当前是否正在查看节点开始,如果是,则在此处插入我们的数据。否则我们需要继续沿着树枝走,直到我们到达一片树叶。因此,我们在左侧或右侧分支上调用此函数(取决于节点中的数字和数据)。我们这样做的方法是在node.left或node.right上调用该函数。如果孩子是null,那么我们想说现在我们的孩子就是我们刚插入的这个新节点。

如果孩子不是叶子,那么通过返回原始孩子,这项任务将不起作用。它只是通过说

来做某事
node = new BNode(data);

因此前一次调用它将是唯一一个将其左或右子项更改为当前新叶,而所有其他左右孩子保持原样的方式。