Legkisebb közös őse egy bináris keresési fa

szavazat
2

A viszonylag egyszerű megtalálni legközelebbi közös ős egy BST ha minden elemét különböző. De mi van, ha néhány érték azonos. Eddig mi csak adatok összehasonlításából csomópontok és ennyi volt, de most már meg kell vizsgálnunk, hogy a csomópontok cím helyett csak értékek?

A kérdést 06/08/2011 11:25
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
1

Igen, ahelyett, hogy a csak a keyaz összehasonlításhoz, használja (key, address of node)az összehasonlítás. Ez egyszerűbbé teszi a kódot, ha foglalkoznak a nem egyedi kulcsokat.

Válaszolt 06/08/2011 11:31
a forrás felhasználó

szavazat
0

Nem látta, hogy milyen struktúra használ, nehéz konkrétumokat mondani, de megpróbálhatod ilyesmit pszeudokódját:

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;
    }
}
Válaszolt 06/08/2011 11:41
a forrás felhasználó

szavazat
0

Itt psudocode. Csak ezek átalakítását szintaxis.

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
Válaszolt 05/09/2014 07:17
a forrás felhasználó

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