Laagste gemeenschappelijke voorouder in een binaire zoekboom

stemmen
2

Het is vrij eenvoudig om het dichtst gemeenschappelijke voorouder te vinden in een BST als alle elementen zijn te onderscheiden. Maar wat als sommige van de waarden zijn hetzelfde. Tot nu toe waren we gewoon het vergelijken van de gegevens van knooppunten en dat was het, maar nu hebben we nodig om te controleren of het adres knooppunten in plaats van alleen waarden?

De vraag is gesteld op 06/08/2011 om 11:25
bron van user
In andere talen...                            


3 antwoorden

stemmen
1

Ja, in plaats van alleen je keyvoor de vergelijking, gebruikt (key, address of node)ter vergelijking. Dit vereenvoudigt de code bij de behandeling van niet-unieke sleutels.

antwoordde op 06/08/2011 om 11:31
bron van user

stemmen
0

Zonder te zien wat voor soort structuur die u gebruikt, is het moeilijk om details te geven, maar je kon iets als dit pseudocode proberen:

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;
    }
}
antwoordde op 06/08/2011 om 11:41
bron van user

stemmen
0

hier is psudocode. gewoon om te zetten 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
antwoordde op 05/09/2014 om 07:17
bron van user

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