Eliminazione di nodi BST che utilizzano gratuitamente (N)

voti
0

Sto codifica di un albero binario di ricerca e sto avendo un po 'di problemi a trovare un modo per eliminare in modo efficace nodo.

Ho questo codice:

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

E N è una struttura nodo che ha 5 campi: valore, lchild, rChild, dimensioni, altezza. In realtà quello che sto facendo qui è quello di rendere l'albero non per puntare verso il nodo che voglio eliminare, ma quando sto cercando di mettere qualcosa di simile:

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

Oppure ogni codice cercando simile, non funziona. Qualcuno mi può punto nella giusta direzione per favore? Grazie.

È pubblicato 30/03/2011 alle 17:20
fonte dall'utente
In altre lingue...                            


1 risposte

voti
0

Prima di tutto che stai dicendo N = NULL e quindi chiamando N-> lchild N è nullo e che punta a niente di così come si aspetta di ottenere il valore lchild?

Poiché si tratta di compiti che non darà una risposta diretta, ma suggerimenti.

Per eliminare il nodo, verificare se ha figli, se doesnt liberare e rimuovere i riferimenti ad esso come ad esempio il ptr i genitori del bambino. Se ha 1 bambino di swap Il PTR che punta al nodo che si desidera eliminare con il bambino e liberare il nodo. Lo stesso vale se si hanno anche 2 bambini.

Risposto il 30/03/2011 a 17:24
fonte dall'utente

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