Как можно избежать обновления коэффициента высоты / баланса при обратном копировании моего дерева, если данные не были добавлены? - PullRequest
0 голосов
/ 29 декабря 2018

Я рекурсивно добавляю узлы к своему дереву 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);
            }
        }
    }
}

Мне нужен этот плохой парень, чтобы быть эффективным и без какого-либо сумасшедшего импорта, как я вижу, что многие люди рекомендуют.

...