0

我正在递归地将节点添加到我的 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);
            }
        }
    }
}

我需要这个坏男孩有效率,没有任何疯狂的进口,就像我看到一群人推荐的那样。

4

0 回答 0