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?
Minste felles stamfar i et binært søketre
stemmer
2
3 svar
stemmer 1
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.
stemmer 0
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;
}
}
stemmer 0
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













