Jego dość łatwe do znalezienia najbliższego wspólnego przodka w BST, czy wszystkie elementy są różne. Ale co, jeśli niektóre wartości są takie same. Do tej pory byliśmy po prostu porównując dane węzłów i to było to, ale teraz nie musimy sprawdzać adres węzłach zamiast tylko wartości?
Najniższy wspólny przodek w binarne drzewo poszukiwań
głosy
2
3 odpowiedzi
głosy 1
1
Tak, zamiast korzystania tylko jedno keydo porównywania, użyć (key, address of node)do porównania. Upraszcza to kod, gdy mamy do czynienia z nie-unikalnych kluczy.
głosy 0
0
Nie widząc, jakiego rodzaju struktury, której używasz, to trudno podać szczegółów, ale można spróbować coś takiego Pseudokod:
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;
}
}
głosy 0
0
tutaj jest psudocode. tylko przekształcić je w składni.
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













