Witam, mam za zadanie zrobić drzewo binarne oraz podstawowe działania na nim typu: dodawanie elementu, wypisanie drzewa, usuwanie węzła, usuwanie całego drzewa i właśnie przy usuwaniu całego drzewa visual wyrzuca mi error, coś o przepełnieniu stosu chyba i nie mam pojęcia jak temu zaradzić :/ Pisze w języku C.
#include <stdio.h>
#include <stdlib.h>
typedef struct Drzewo_ //struktura drzewa
{
int wartosc;
struct Drzewo_ *Prawy;
struct Drzewo_ *Lewy;
} Drzewo;
Drzewo* dodawanie(int n, Drzewo **korzen); //deklaracja funkcji dodajaca elementy do drzewa
Drzewo* szukaj(Drzewo* korzen, int wartosc); // deklaracja funkcji szukajacej dany wezel i zwracajacy go lub null gdy nie istnieje
void wypiszDrzewo(Drzewo *korzen); // deklaracja funkcji wypisującej drzewo
void usuwanieDrzewa(Drzewo *korzen);
int main()
{
Drzewo *poczatek = NULL;
Drzewo *wezel = NULL;
wypiszDrzewo(poczatek);
printf("Wypisanie drzewa:\n");
dodawanie(20, &poczatek);
dodawanie(5, &poczatek);
dodawanie(10, &poczatek);
dodawanie(15, &poczatek);
dodawanie(2, &poczatek);
dodawanie(30, &poczatek);
dodawanie(25, &poczatek);
wypiszDrzewo(poczatek);
dodawanie(6, &poczatek);
dodawanie(16, &poczatek);
printf("\nDrugie wypisanie drzewa:\n");
wypiszDrzewo(poczatek);
printf("\nZwracamy podany element drzewa: \n");
wezel = szukaj(poczatek, 10);
printf("%d\n\n", *wezel);
//usuwanieDrzewa(poczatek);
dodawanie(123, &poczatek);
wypiszDrzewo(poczatek);
return 0;
}
Drzewo* dodawanie(int n, Drzewo **korzen)
{ //jezeli drzewo jest puste to dodaj korzen
if ((*korzen) == NULL)
{
(*korzen) = (Drzewo*)malloc(sizeof (*korzen));
(*korzen)->wartosc = n;
(*korzen)->Prawy = NULL;
(*korzen)->Lewy = NULL;
}
//jezeli zadana wartosc jest mniejsza od korzenia idz do lewego poddrzewa
else if(n < (*korzen)->wartosc)
{ //jezeli lewe poddrzewo istnieje wywolaj dla niego ta funkcje rekurencyjnie
if((*korzen)->Lewy != NULL)
{
dodawanie(n, &((**korzen).Lewy));
}
else
{
Drzewo *nowy = (Drzewo*)malloc(sizeof (*korzen));
nowy->wartosc = n;
nowy->Lewy = NULL;
nowy->Prawy = NULL;
(*korzen)->Lewy=nowy;
}
}
//jezeli zadana wartosc jest wieksza lub rowna korzeniowi idz do prawego poddrzewa
else
{
//jezeli prawe poddrzewo istnieje wywolaj dla niego ta funkcje rekurencyjnie
if((*korzen)->Prawy != NULL)
{
dodawanie(n , &((**korzen).Prawy));
}
//jezeli prawe poddrzewo nie istnieje dodaj nowy wezel o zadanej wartosci
else
{
Drzewo *nowy = (Drzewo*)malloc(sizeof (*korzen));
nowy->wartosc = n;
nowy->Lewy = NULL;
nowy->Prawy = NULL;
(*korzen)->Prawy=nowy;
}
}
return *korzen;
}
Drzewo* szukaj(Drzewo* korzen, int wartosc)
{
if (korzen->wartosc == wartosc) return korzen;
else if (wartosc < korzen->wartosc && korzen->Lewy != NULL) return szukaj(korzen->Lewy, wartosc);
else if (wartosc > korzen->wartosc && korzen->Prawy != NULL) return szukaj(korzen->Prawy, wartosc);
return NULL;
}
void wypiszDrzewo(Drzewo *korzen)
{
//if(korzen->Lewy != NULL) //jezeli ma dzieci po lewej stronie wywolaj funkcje rekurencyjnie
if(korzen != NULL){
wypiszDrzewo(korzen->Lewy);
printf("%d\n", korzen->wartosc); //wypisz wartosc
wypiszDrzewo(korzen->Prawy);
}
return;
//if(korzen->Prawy != NULL) //jezeli ma dzieci po prawej stronie wywolaj rekurencyjnie
//wypiszDrzewo(korzen->Prawy);
}
void usuwanieDrzewa(Drzewo *korzen)
{
Drzewo* temp;
if (korzen != NULL)
{
temp = korzen;
usuwanieDrzewa(korzen->Lewy);
usuwanieDrzewa(korzen->Prawy);
free(temp);
}
}
A tutaj error jaki mi się pojawia:
Shalom