Mój program wywala drzewo po włożeniu do jednego węzła głównego

głosy
0

Nie jestem zbyt dobry w podejmowaniu drzew i całkowicie zepsuć rekursji. Jednak starałem się uczynić program do wstawiania i wyświetlania danych do drzewa.

Problemem jest to, że wywala to po włożeniu do węzła głównego i nie wiem dlaczego. Drzewo nie jest zbyt duży. Tylko 10 int.

#include <stdio.h>
#include <stdlib.h>
#define SIZE 10;
/* run this program using the console pauser or add your own getch, system(pause) or input loop */
struct node{
    int data;
    struct node * left;
    struct node * right;
};


void insert(struct node * root,int num){
    printf(Insert called for num:%d\n,num);
    if(root == NULL){
        root = (struct node *)malloc(sizeof(struct node));
        root->data = num;
    }else if(num > root->data){ // Number greater than root ?
        insert(root->right,num); // Let the right sub-tree deal with it
    }else if(num < root->data){// Number less than root ?
        insert(root->left,num);// Let the left sub-tree deal with it.
    }else{
        // nothing, just return.
    }
}


void display(struct node * root){ // Inorder traversal
    if(root->left!=NULL){ // We still have children  in left sub-tree ?
        display(root->left); // Display them.
    }

    printf(%d,root->data); // Display the root data

    if(root->right!=NULL){ // We still have children in right sub-tree ?
        display(root->right); // Display them.
    }

}

int main(int argc, char *argv[]) {
    int a[10] = {2,1,3,5,4,6,7,9,8,10};
    int i;
    struct node * tree;

    for(i = 0; i < 10;i++){
        insert(tree,a[i]);
    }
    printf(Insert done);
    return 0;
}  

Czy ktoś może mi powiedzieć, gdzie poszło źle?

Wiem, że jest mile widziana prosić ludzi, aby sprawdzić swój kod na stosie, ale czasami powiązać programowanie prac: p

UPDATE:
Po ustawieniu struct node * tree = NULL;The insert()metoda działa dobrze. display()Programu powoduje awarię.

Utwórz 02/10/2013 o 05:54
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
2

w Twoim

int main(int argc, char *argv[]) {
    // ...
    struct node * tree;
    // what is the value of tree at this line?
    for(i = 0; i < 10;i++){
        insert(tree,a[i]);
    }
    // ...
} 

co oznacza „drzewo” wskaż polecenie w wierszu oznaczone?

Odpowiedział 02/10/2013 o 05:57
źródło użytkownik

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