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?
Legkisebb közös őse egy bináris keresési fa
szavazat
2
3 válasz
szavazat 1
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.
szavazat 0
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;
}
}
szavazat 0
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













