如果未添加任何数据,如何避免在备份树的过程中更新高度/平衡因子?

时间:2018-12-29 03:03:05

标签: java recursion tree avl-tree

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

我需要这个坏男孩才能有效率,并且没有疯狂的输入,就像我看到的很多人推荐的那样。

0 个答案:

没有答案