Minste felles stamfar i et binært søketre

stemmer
2

Det er ganske lett å finne nærmeste felles stamfar i en BST hvis alle elementene er forskjellige. Men hva om noen av verdiene er like. Til nå var vi bare sammenligne dataene for noder, og det var det, men nå trenger vi å se etter noder adresse i stedet for bare verdier?

Publisert på 06/08/2011 klokken 10:25
kilden bruker
På andre språk...                            


3 svar

stemmer
1

Ja, i stedet for å bruke bare din keyfor sammenligning bruker (key, address of node)for sammenligning. Dette forenkler koden når du arbeider med ikke-unike nøkler.

Svarte 06/08/2011 kl. 10:31
kilden bruker

stemmer
0

Uten å se hva slags struct du bruker, er det vanskelig å gi detaljer, men du kan prøve noe sånt som dette pseudokode:

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;
    }
}
Svarte 06/08/2011 kl. 10:41
kilden bruker

stemmer
0

her er psudocode. bare konvertere dem til syntaks.

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
Svarte 05/09/2014 kl. 06:17
kilden bruker

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