Cel mai mic strămoș comun într-un copac binar de căutare

voturi
2

Sale destul de ușor de a găsi cel mai apropiat strămoș comun într-un BST dacă toate elementele sunt distincte. Dar dacă unele dintre valorile sunt aceleași. Pana acum am fost doar compararea datelor de noduri și că a fost, dar acum avem nevoie pentru a verifica adresa de noduri în loc de doar valori?

Întrebat 06/08/2011 la 11:25
sursa de către utilizator
În alte limbi...                            


3 răspunsuri

voturi
1

Da, în loc de a folosi doar dvs. keypentru compararea, utilizați (key, address of node)pentru comparație. Acest lucru simplifică codul atunci când se ocupă cu chei non-unice.

Publicat 06/08/2011 la 11:31
sursa de către utilizator

voturi
0

Fără a vedea ce fel de struct pe care îl utilizați, este greu pentru a da detalii, dar ai putea încerca ceva de genul pseudocod:

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;
    }
}
Publicat 06/08/2011 la 11:41
sursa de către utilizator

voturi
0

aici este psudocode. doar le converti în sintaxă.

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
Publicat 05/09/2014 la 07:17
sursa de către utilizator

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