Witam
Zacząłem pisać program do drzewa binarnego, jednak po wywołaniu funkcji Search, crashuje mi się program. Bardzo proszę o pomoc
Pozdrawiam
#include <stdio.h>
#include <string.h>
#define ILOSC_NUMEROW 20
typedef struct dane{
char imie[20];
char nazwisko[20];
int numer[ILOSC_NUMEROW];
}Dane;
typedef struct drzewo{
struct drzewo *lewy;
struct drzewo *prawy;
Dane dane;
}Drzewo;
void Insert(Drzewo *drzewo);
void InOrder(Drzewo *root, Drzewo *temp);
//void SearchMin(Drzewo *drzewo);
//void SearchMax(Drzewo *drzewo);
void Search(Drzewo *root);
//void Wysokosc(Drzewo *drzewo);
Drzewo *Compare(Drzewo *root, char *nazwisko);
int main(){
fprintf(stderr, "test");
int liczba_wezlow = 0;
int wysokoc = 0;
char ch;
Drzewo root;
root.lewy = NULL;
root.prawy = NULL;
printf("Wpisz a - aby dodac dane, b - aby wyszukac minimalne, "
"c - aby wyszukac maksymalne, d - wyszukac, q - aby wyjsc\n");
while ((ch = getchar()) != 'q'){
switch (ch){
case 'a':
Insert(&root);
break;
case 'b':
//SearchMin(&root);
break;
case 'c':
//SearchMax(&root);
break;
case 'd':
Search(&root);
break;
case 'e':
//Wysokosc(&root);
break;
case 'f':
printf("%d", liczba_wezlow);
break;
default:
printf("Blad w instrukcji switch!\n");
}
printf("Wpisz a - aby dodac dane, b - aby wyszukac minimalne, "
"c - aby wyszukac maksymalne, d - wyszukac, e - ilosc wezlow "
"f - wysokosc, q - wyjscie\n");
while(getchar () != '\n')
continue;
}
return 0;
}
//WPROWADZA NOWA POZYCJE
void Insert(Drzewo *root){
printf("insert!\n");
int i, ilosc;
Drzewo temp;
printf("Podaj imie");
scanf("%s", temp.dane.imie);
printf("Podaj nazwisko");
scanf("%s",temp.dane.nazwisko);
printf("Podaj liczbe numerow ktore chcesz dodac");
scanf("%d", &ilosc);
for (i = 0; i < ilosc; i++)
scanf("%d", &(temp.dane.numer[i]));
temp.lewy = NULL;
temp.prawy = NULL;
InOrder(root, &temp);
printf("Koniec Insert");
}
//REKURENCYJNIE PRZECHODZI PO DRZEWIE I DODAJE POZYCJE
void InOrder(Drzewo *root, Drzewo *temp){
printf("jest!");
if (strcmp(temp->dane.nazwisko, root->dane.nazwisko) > 0){
if (root->prawy == NULL)
root->prawy = temp;
InOrder(root->prawy, temp);
}
else if (strcmp(temp->dane.nazwisko, root->dane.nazwisko) < 0){
if (root ->lewy == NULL)
root->lewy = temp;
InOrder(root->lewy, temp);
}
}
//WYSZUKIWANIE POZYCJI
void Search(Drzewo *root){
char nazwisko[20];
Drzewo *temp;
printf("Wpisz nazwisko do wyszukania: ");
scanf("%s", nazwisko);
temp = Compare(root, nazwisko);
if (temp == NULL)
fprintf(stderr, "Brak pozycji!");
printf("Imie: %s", temp->dane.imie);
}
//REKURENCYJNIE SPRAWDZA CZY JEST POZYCJA
Drzewo *Compare(Drzewo *root, char *nazwisko){
printf("compare!");
if (strcmp(nazwisko, root->dane.nazwisko) > 0){
if (root->prawy == NULL){
printf("brak pozycji!");
return NULL;
}
Compare(root->prawy, nazwisko);
}
else if (strcmp(nazwisko, root->dane.nazwisko) < 0){
if (root ->lewy == NULL){
printf("brak pozycji!");
return NULL;
}
Compare(root->lewy, nazwisko);
}
else
return root;
}