BST mit einer Rekursion und gegebenen Strukturen

stimmen
0

Ich habe ein paar Methoden für eine BST codieren und ich habe einige Probleme, lassen Sie mich erklären.

Ich habe die folgenden Strukturen:

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

und

struct tree {
    struct node *root;
};

zusammen mit den folgenden Funktionen:

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

    return T;
}

und

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

    return N;
}

Und in meinem Haupt muß ich das nennen (zum Beispiel):

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

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

Was ich tun muß, ist die Funktion insertKey (int i, struct Baum * T) mit der Rekursion zu erstellen.

Ich wollte wie etwas tun

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

Aber wird es nicht sehr weit, die Rekursion würde mir erlauben, insertKey wieder anzurufen, aber ich kann nicht einen Knoten und einen Baum der gleichen Art und Weise zu verwenden scheinen.

Wer weiß, wie ich könnte das tun, ohne die gegebenen Strukturen zu verändern?

Vielen Dank.

Veröffentlicht am 20/03/2011 um 19:16
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Ihre insertKey nimmt einen Baum als Argument. Ein Baum ist nur ein Zeiger auf die Spitze.

Was ich empfehlen Sie tun, ist eine insertKey Funktion schreiben, die einen Knoten für Argument übernimmt. Auch in dieser Funktion müssen Sie überprüfen, um zu sehen, ob es einen anderen Baum auf der linken / rechten Kind ist.

Derzeit bauen Sie gerade einen neuen Knoten unabhängig davon, was es ist. Dadurch werden alle vorherigen Einfügungen überschrieben.

Beantwortet am 20/03/2011 um 19:47
quelle vom benutzer

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