我正在将节点递归地添加到我的avl树中,我是效率高的FIEND!因此,当我添加名为d1的数据并一直到达已经具有d1的节点时,就不会添加它,因此我需要知道如何避免在备份递归的过程中进行更新“堆栈”,就像我想的那样。如果有一种方法可以触发某些破坏所有出色的递归调用的东西。
我没有做太多尝试,因为我真的想不出解决方法。
private void rAdd(AVLNode<T> rootTemp, T data) {
if (rootTemp.getData().compareTo(data) > 0) {
if (rootTemp.getLeft() == null) {
rootTemp.setleft(data);
rootTemp.getLeft().setLeft(null);
rootTemp.getLeft().setRight(null);
rootTemp.getLeft().setHeight(0);
rootTemp.getLeft().setBalanceFactor(0);
return;
} else {
if (rootTemp.getLeft().getData().compareTo(data) == 0) {
return;
} else {
rAdd(rootTemp.getLeft(), data);
update(rootTemp);
}
}
} else {
if (rootTemp.getRight() == null) {
rootTemp.setleft(data);
rootTemp.getLeft().setLeft(null);
rootTemp.getLeft().setRight(null);
rootTemp.getLeft().setHeight(0);
rootTemp.getLeft().setBalanceFactor(0);
return;
} else {
if (rootTemp.getRight().getData().compareTo(data) == 0) {
return;
} else {
rAdd(rootTemp.getRight(), data);
update(rootTemp);
}
}
}
}
我需要这个坏男孩才能有效率,并且没有疯狂的输入,就像我看到的很多人推荐的那样。