nodes verwijderen in BST gebruik van vrije (N)

stemmen
0

Ik ben het coderen van een binaire zoekboom en ik heb een beetje moeite met het vinden van een manier om het knooppunt effectief te verwijderen.

Ik heb deze code:

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

En N een knooppuntstructuur die 5 velden: waarde lChild, rChild, grootte, hoogte. In feite wat ik hier doe is om de boom niet te maken om te wijzen in de richting van het knooppunt dat ik wilt verwijderen, maar als ik ben op zoek naar iets als gezegd:

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

Of iedere elkaar lijkende code, werkt het niet. Kan iemand me in de juiste richting alstublieft? Dank je.

De vraag is gesteld op 30/03/2011 om 17:20
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

Allereerst je zegt N = NULL en vervolgens roepen N-> lchild N is van nul en wijst naar niets dus hoe verwacht u de lchild waarde te krijgen?

Aangezien dit huiswerk zal ik niet een direct antwoord, maar hints geven.

Om het knooppunt te verwijderen, en controleer of er kinderen, als het het doesnt te bevrijden en verwijzingen naar het te verwijderen, zoals de ouders kind ptr. Als het 1 kind swap de ptr die verwijst naar het knooppunt dat u wilt verwijderen met het kind en bevrijden het knooppunt. Dit geldt ook als u ook 2 kinderen.

antwoordde op 30/03/2011 om 17:24
bron van user

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