serbest (N) kullanılarak BST olarak silme bezleri

oy
0

Ben bir ikili arama ağacı kodlama ve ben etkili bir düğüm silmek için bir yol bulmak biraz sorun yaşıyorum.

Bu kodu vardır:

struct node* deleteNode(int i, struct node *N)

{
    if (N==NULL)
    {
        return NULL;
    }
    else if (i<N->value)
    {
        N->size--;
        N->lChild=deleteNode(i,N->lChild);
    }
    else if (i>N->value)
    {
        N->size--;
        N->rChild=deleteNode(i,N->rChild);
    }
    else if (N->lChild==NULL)
    {
        return N->rChild;
    }
    else if (N->rChild==NULL)
    {
        return N->lChild;
    }
    else
    {
        N->size--;
        N->value=findMin(N->rChild);
        N->rChild=deleteNode(N->value,N->rChild);
    }
    return N;
}

değeri, lChild, rChild, boyut, yükseklik: ve 5 N alanlara sahip bir düğüm bir yapıdır. Aslında benim burada yapıyorum ben silmek istiyorum ama düğüme doğru işaret etmek değil ağaç yapmaktır ben gibi bir şey koymak için çalışıyorum zaman:

    else if (N->rChild==NULL)
    {
        free(N);
        N=NULL;
        return N->lChild;
    }

Ya da her benzer görünümlü kod, bu işe yaramaz. Birisi bana doğru yönde lütfen işaret edebilir? Teşekkür ederim.

Oluştur 30/03/2011 saat 17:20
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

Her şeyden önce sen N = NULL söylüyorsun ve daha sonra N- çağırarak> lchild N null ve hiçbir şey işaret böylece nasıl lchild değeri elde bekliyorsunuz?

Bu ödev olduğundan ben doğrudan cevap ama ipuçları vermeyecektir.

çocukları varsa onu özgür ve böyle ebeveynler çocuk ptr o sonuca başvuruları silmez olmadığını kontrol, düğüm silin. o 1 çocuk takas çocukla birlikte silip düğüm serbest istediğiniz düğüme işaret ptr varsa. Ayrıca 2 çocuk da aynı durum geçerli.

Cevap 30/03/2011 saat 17:24
kaynak kullanıcı

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