使用递归的二叉树插入(澄清)

时间:2017-09-29 00:57:10

标签: java binary-tree

我有以下代码插入二叉树:

public void insert(T item) {
    root = insert(item, root);
}


private Node insert(T item, Node node) {
    if(node == null){
        return new Node(item, null, null);

    } else {

        if(item.compareTo(node.item) > 0) {
            node.rightChild = insert(item, node.rightChild);
        } else {
            node.leftChild = insert(item, node.leftChild);
        }
    }        

    return node;
}

代码工作正常,我已经测试过了

我的问题是,为什么根本不会改变,因为在公共函数中我将返回的节点从私有函数分配给根

谢谢!

2 个答案:

答案 0 :(得分:1)

我再次阅读您的代码,您的代码是正确的。返回值始终是根元素,因为您的frist函数调用是insert(item, root),并且返回值是您给出的值。

答案 1 :(得分:1)

公共插入只是递归方法的一个接口,它重建树,因为堆栈在根(root = ...)展开你开始的地方。除了第一个插入之外,您向左或向右移动直到插入叶级。如果没有任何平衡,您将在树的生命周期中拥有相同的根(假设没有删除)。因此,插入时root的唯一变化是它为空时。

注意:当插入具有现有值的节点时,还会发生什么事情;你丢弃它,允许重复,或交换对象?这是一个实现细节。