Slette noder i BST ved hjelp av fri (N)

stemmer
0

Jeg koding et binært søketre og jeg har litt problemer med å finne en måte å slette node effektivt.

Jeg har denne koden:

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

Og N er et nodestruktur som har 5 felt: verdi, lChild, rChild, størrelse, høyde. Faktisk det jeg gjør her er å få treet ikke å peke mot noden som jeg ønsker å slette, men når jeg prøver å sette noe sånt som:

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

Eller hver ligner på jakt kode, fungerer det ikke. Kan noen peke meg i riktig retning please? Takk skal du ha.

Publisert på 30/03/2011 klokken 16:20
kilden bruker
På andre språk...                            


1 svar

stemmer
0

Først av alt du sier N = NULL og deretter ringer N-> lchild N er null og peker på noe så hvordan forventer du å få lchild verdi?

Siden dette er lekser jeg vil ikke gi et direkte svar, men hint.

For å slette noden, sjekk om det har barn, hvis den ikke frigjøre den og fjerne referanser til det som foreldrene barnet ptr. Hvis det har en barne swap PTR som peker til noden du vil slette med barnet og frigjøre node. Det samme gjelder hvis du også har 2 barn.

Svarte 30/03/2011 kl. 16:24
kilden bruker

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