Bir İkili Arama Ağacında En Küçük Ortak atası

oy
2

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?

Oluştur 06/08/2011 saat 11:25
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
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.

Cevap 06/08/2011 saat 11:31
kaynak kullanıcı

oy
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;
    }
}
Cevap 06/08/2011 saat 11:41
kaynak kullanıcı

oy
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
Cevap 05/09/2014 saat 07:17
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more