Die niedrigste gemeinsame Vorfahren in einem binären Suchbaum

stimmen
2

Es ist ziemlich einfach, die am nächsten gemeinsamen Vorfahren in einem BST zu finden, wenn alle Elemente verschieden sind. Aber was, wenn einige Werte sind gleich. Bis jetzt wurden verglichen wir nur die Daten von Knoten und das war es, aber jetzt brauchen wir für Knoten Adresse zu überprüfen, statt nur Werte?

Veröffentlicht am 06/08/2011 um 11:25
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
1

Ja, statt mit nur Ihre keyfür den Vergleich, verwenden Sie (key, address of node)zum Vergleich. Dies vereinfacht den Code , wenn sie mit nicht eindeutigen Schlüssel zu tun.

Beantwortet am 06/08/2011 um 11:31
quelle vom benutzer

stimmen
0

Ohne zu sehen, welche Art von Struktur Sie verwenden, ist es schwer, Besonderheiten zu geben, aber man könnte so etwas wie dieser Pseudo-Code versuchen:

struct BST {
    struct BST* parent;
    struct BST* left;
    struct BST* right;
    void* value;
}

find_common_ancestor(struct BST* x, struct BST* y)
{
    set<struct BST*> ancestors;

    // Add all of x's ancestors to set.
    while (true) {
        ancestors.insert(x);

        if (x == NULL)
            break;

        x = x=>parent;
    }

    // Check y's ancestors against x's until a match is found.
    while (true) {
        if (ancestors.count(y) > 0)
            return y;

        y = y->parent;
    }
}
Beantwortet am 06/08/2011 um 11:41
quelle vom benutzer

stimmen
0

hier ist psudocode. wandeln sie nur in Syntax.

GETLeastCommonAn(BINARYTREE BT, NODE A, NODE  B)
IF Root==NIL
    return NIL
ENDIF

IF Root==A OR root==B
    return Root
ENDIF

Left = GETLCA (Root.Left, A, B)
Right = GETLCA (Root.Right, A, B)

IF Left! = NIL AND Right! = NIL
    return root
ELSEIF Left! = NIL
    Return Left
ELSE
    Return Right
ENDIF
Beantwortet am 05/09/2014 um 07:17
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more