Ștergerea nodurilor în BST folosind gratuit (N)

voturi
0

Sunt de codificare un arbore binar de căutare și am o mică problemă a găsi o modalitate de a șterge în mod eficient nod.

Am acest cod:

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;
}

Și N este o structură nod care au 5 domenii: valoare, lChild, rChild, dimensiune, înălțime. De fapt, ceea ce fac aici este de a face copacul sa nu indreptati spre nodul pe care vreau să-l ștergeți, dar când am încercat să pună ceva de genul:

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

Sau fiecare cod care arată similar, aceasta nu funcționează. Poate cineva să-mi punct în direcția cea bună te rog? Mulțumesc.

Întrebat 30/03/2011 la 17:20
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
0

In primul rand ce spui N = NULL și apoi de asteptare N> lchild N este nul și arătând spre nimic, astfel cum vă așteptați pentru a obține valoarea lchild?

Din moment ce acest lucru este temele nu va da un răspuns direct, dar indicii.

Pentru a șterge nodul, verificați dacă are copii, în cazul în care doesnt liber și de a elimina referirile la ea, cum ar fi PTR părinții copilului. În cazul în care are un copil de swap PTR care indică nodul pe care doriți să-l ștergeți cu copilul și elibera nodul. Același lucru este valabil dacă aveți și 2 copii.

Publicat 30/03/2011 la 17:24
sursa de către utilizator

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