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?
Laagste gemeenschappelijke voorouder in een binaire zoekboom
stemmen
2
De vraag is gesteld op 06/08/2011 om 11:25 2011-08-06 11:25
bron van user arvind.mohan
In andere talen...
bron van user arvind.mohan
In andere talen...
3 antwoorden
stemmen 1
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.
stemmen 0
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;
}
}
stemmen 0
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