Najniższy wspólny przodek w binarne drzewo poszukiwań

głosy
2

Jego dość łatwe do znalezienia najbliższego wspólnego przodka w BST, czy wszystkie elementy są różne. Ale co, jeśli niektóre wartości są takie same. Do tej pory byliśmy po prostu porównując dane węzłów i to było to, ale teraz nie musimy sprawdzać adres węzłach zamiast tylko wartości?

Utwórz 06/08/2011 o 11:25
źródło użytkownik
W innych językach...                            


3 odpowiedzi

głosy
1

Tak, zamiast korzystania tylko jedno keydo porównywania, użyć (key, address of node)do porównania. Upraszcza to kod, gdy mamy do czynienia z nie-unikalnych kluczy.

Odpowiedział 06/08/2011 o 11:31
źródło użytkownik

głosy
0

Nie widząc, jakiego rodzaju struktury, której używasz, to trudno podać szczegółów, ale można spróbować coś takiego Pseudokod:

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;
    }
}
Odpowiedział 06/08/2011 o 11:41
źródło użytkownik

głosy
0

tutaj jest psudocode. tylko przekształcić je w składni.

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
Odpowiedział 05/09/2014 o 07:17
źródło użytkownik

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