Sale destul de ușor de a găsi cel mai apropiat strămoș comun într-un BST dacă toate elementele sunt distincte. Dar dacă unele dintre valorile sunt aceleași. Pana acum am fost doar compararea datelor de noduri și că a fost, dar acum avem nevoie pentru a verifica adresa de noduri în loc de doar valori?
Cel mai mic strămoș comun într-un copac binar de căutare
voturi
2
Întrebat 06/08/2011 la 11:25 2011-08-06 11:25
sursa de către utilizator arvind.mohan
În alte limbi...
sursa de către utilizator arvind.mohan
În alte limbi...
3 răspunsuri
voturi 1
1
Da, în loc de a folosi doar dvs. keypentru compararea, utilizați (key, address of node)pentru comparație. Acest lucru simplifică codul atunci când se ocupă cu chei non-unice.
voturi 0
0
Fără a vedea ce fel de struct pe care îl utilizați, este greu pentru a da detalii, dar ai putea încerca ceva de genul pseudocod:
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;
}
}
voturi 0
0
aici este psudocode. doar le converti în sintaxă.
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