我有以下代码插入二叉树:
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;
}
代码工作正常,我已经测试过了
我的问题是,为什么根本不会改变,因为在公共函数中我将返回的节点从私有函数分配给根
谢谢!
答案 0 :(得分:1)
我再次阅读您的代码,您的代码是正确的。返回值始终是根元素,因为您的frist函数调用是insert(item, root)
,并且返回值是您给出的值。
答案 1 :(得分:1)
公共插入只是递归方法的一个接口,它重建树,因为堆栈在根(root = ...
)展开你开始的地方。除了第一个插入之外,您向左或向右移动直到插入叶级。如果没有任何平衡,您将在树的生命周期中拥有相同的根(假设没有删除)。因此,插入时root的唯一变化是它为空时。
注意:当插入具有现有值的节点时,还会发生什么事情;你丢弃它,允许重复,或交换对象?这是一个实现细节。