BST cu o recursie și structuri date

voturi
0

Trebuie să cod unele metode pentru o BST și am câteva probleme, lasă-mă să explic.

Am următoarele structuri:

struct node {
    struct node *lChild; 
    struct node *rChild; 
    int value; 
};

și

struct tree {
    struct node *root;
};

împreună cu următoarele funcții:

struct tree* constructNewTree()
{
    struct tree *T=malloc(sizeof(struct tree));
    T->root=NULL;

    return T;
}

și

struct node* constructNewNode(int i)
{
    struct node *N=malloc(sizeof(struct node));
    N->value=i;
    N->lChild=NULL;
    N->rChild=NULL;

    return N;
}

Și în principala mea trebuie să numesc acest lucru (de exemplu):

int main()
{
    struct tree *T;
    T=constructNewTree();

    insertKey(5,T);
    insertKey(2,T);
    insertKey(9,T);
    return 0;
}

Ceea ce trebuie să fac este de a crea insertKey funcție (int i, struct copac * T), folosind recursivitatea.

Am vrut să fac ceva de genul

void insertKey(int i, struct tree *T)
{
    if (T->root==NULL) {
        T->root=constructNewNode(i);
        return;
    }
    else {
        if (i<=T->root->value) {
            T->root->lChild=constructNewNode(i);
        else if (i>T->root->value) {
            T->root->rChild=constructNewNode(i);
        }
    }
}

Dar nu ajunge foarte departe, folosind recurență mi-ar permite să sun insertKey din nou, dar nu pot par să folosească un nod și un copac în același mod.

Stie cineva cum aș putea face asta fără a modifica structurile date?

Mulțumesc foarte mult.

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


1 răspunsuri

voturi
1

insertKey ta ia un copac ca argument. Un copac este doar un pointer la foarte sus.

Ceea ce recomandăm să faceți este să scrie o funcție insertKey care ia un nod pentru argumentul său. De asemenea, în această funcție, va trebui să verificați pentru a vedea dacă există un alt copac pe copilul stânga / dreapta.

În prezent, puteți construi doar un nou nod, indiferent de ceea ce este acolo. Aceasta va suprascrie inserări anterioare.

Publicat 20/03/2011 la 19:47
sursa de către utilizator

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