tüm unsurları farklıdır eğer bir BST en yakın ortak atası bulmak Onun oldukça kolay. Ama bazı değerler aynı isen. Bugüne kadar biz sadece düğüm verilerini karşılaştırarak ve bu oldu, ama şimdi sadece değerlerin yerine düğümlerin adresi için kontrol etmek gerekiyor?
Bir İkili Arama Ağacında En Küçük Ortak atası
oy
2
3 cevaplar
oy 1
1
Evet, bunun yerine sadece kullanmanın senin keykarşılaştırma için kullanmak (key, address of node)karşılaştırma için. Benzersiz olmayan anahtarlar ile uğraşırken Bu kod kolaylaştırır.
oy 0
0
Kullandığınız yapı ne tür görmeden, bu detaylar vermek zor, ama bu pseudocode gibi bir şey deneyebilirsiniz:
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;
}
}
oy 0
0
Burada psudocode olduğunu. Sadece sözdizimi dönüştürmek.
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













