Törlése csomópontok BST segítségével szabad (N)

szavazat
0

Én kódoló bináris kereső fába, és én magam egy kis baj találni a módját, hogy törölje csomópont hatékonyan.

Én ezt a kódot:

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

És n értéke egy csomópont szerkezete, amelyek 5 mezők: érték, lChild, rChild, mérete, magassága. Tény, hogy mit csinálok itt az, hogy a fa nem pont felé csomópontot, hogy szeretnék törölni, de amikor próbálok tenni valamit, mint például:

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

Vagy minden hasonló kinézetű kódot, akkor nem működik. Tud valaki nekem pont a helyes irányba, kérem? Köszönöm.

A kérdést 30/03/2011 17:20
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

Először azt mondod, N = NULL, majd hívja N-> N lchild semmis és mutatva semmi, így hogyan számíthat arra, hogy a lchild érték?

Mivel ez a házi feladatot én nem adott közvetlen választ, de tippeket.

Ha törölni szeretné a csomópont, ellenőrizze, hogy van gyerek, ha nagyon nem szabad azt, és vegye rá mutató hivatkozás, mint a szülők a gyermek ptr. Ha van 1 gyerek csere a ptr, hogy rámutat arra a csomópont a törölni kívánt a gyermek, és szabad a csomópontot. Ugyanez érvényes, ha te is 2 gyermek részére.

Válaszolt 30/03/2011 17:24
a forrás felhasználó

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