我正在递归地将节点添加到我的 avl 树中,我是一个效率恶魔!因此,当我添加名为 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);
}
}
}
}
我需要这个坏男孩有效率,没有任何疯狂的进口,就像我看到一群人推荐的那样。