Napisałem BST (Binary Search Tree), ale niestety nie do końca działa. Proszę o pomoc w znalezieniu błędów.
Oto Kod Programu:
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
struct Wezel
{
double Klucz;
int Wart;
Wezel *Left;
Wezel *Right;
};
Wezel *korzen;
void Wstaw (Wezel *korzen, double _Klucz, int _Wart)
{
if (korzen==NULL)
{
Wezel *korzen=new Wezel;
korzen->Klucz=_Klucz;
korzen->Wart=_Wart;
korzen->Left=NULL;
korzen->Right=NULL;
}
else if(_Klucz < korzen->Klucz)
Wstaw(korzen->Left, _Klucz, _Wart);
else if(_Klucz > korzen->Klucz)
Wstaw(korzen->Right, _Klucz, _Wart);
}
void Wyszukaj (Wezel *korzen, double _Klucz)
{
if (korzen == NULL)
printf("Podany klucz nie istnieje");
else
if (korzen->Klucz == _Klucz)
printf("Podany klucz istnieje");
else
if (_Klucz < korzen->Klucz)
Wyszukaj(korzen->Left, _Klucz);
else
if (_Klucz > korzen->Klucz)
Wyszukaj (korzen->Right, _Klucz);
}
void Usun (Wezel *korzen, double _Klucz)
{
if ((korzen->Left == NULL) && (korzen->Right == NULL)) // korzen jest lisciem
korzen=NULL;
else
if ((korzen->Left != NULL) && (korzen->Right == NULL)) // korzen ma jednego syna (z lewej)
korzen=korzen->Left;
else
if ((korzen->Left == NULL) && (korzen->Right !=NULL)) // korzen ma jednego syna (z prawej)
korzen=korzen->Right;
}
void Wypisz (Wezel *korzen)
{
std::cout << korzen->Klucz << " , " << korzen->Wart << "\n";
if(korzen->Left != NULL) Wypisz (korzen->Left);
if(korzen->Right != NULL) Wypisz (korzen->Right);
}
int main()
{
Wstaw(korzen, 1, 7);
Wstaw(korzen, 2, 43);
Wypisz(korzen);
Wyszukaj(korzen, 1);
Usun(korzen, 1);
Wypisz(korzen);
system("PAUSE");
return EXIT_SUCCESS;
}