Witam mam napisać program który przechowuje liczby w drzewie binarnym. Napisałem ale nie działa tak jak powinien gdzie popełniłem błąd?
Wejście
Ciąg wierszy zakończony symbolem znaku końca pliku (EOF) reprezentujący poprawnie (zgodnie z powyższym opisem) pewne drzewo binarne T. Każdy pojedynczy wiersz zakończony znakiem nowej linii (kod ASCII 10) opisujący pozycję wierzchołka w drzewie T i zawierający:
-
liczba całkowita - etykieta wierzchołka,
-
znak odstępu (kod ASCII 32),
-
ciąg znaków L (kod ASCII 76) oraz R (kod ASCII 82) - ciąg skierowań krawędzi na ścieżce od korzenia drzewa do rozważanego wierzchołka.
#include <cstdlib>
#include <iostream>
#include <string>
#include <cstring>
#include <stdio.h>
using namespace std;
struct drzewo
{
int liczba;
drzewo *lewy,*prawy;
drzewo(int liczba)
{
this->liczba=liczba;
lewy = prawy = NULL;
}
};
int main()
{
drzewo * korzen = NULL;
int value=0,len=0, liczba;
char ch;
bool ujemna = false;
drzewo** iter = &korzen;
while((ch=getchar())!=EOF)
{
if(ch=='-')
ujemna = true;
if(isdigit(ch))
{
++len;
value=value*10+ch-'0';
}
else if(len)
{
if(ujemna)
{
liczba = -value;
ujemna = false;
}
else
{
liczba = value;
value=len=0;
}
}
else if(ch == ' ')
drzewo** iter = &korzen;
else if(ch==10)
{
if(*iter == NULL)
*iter = new drzewo(liczba);
(*iter)->liczba = liczba;
}
else
{
if(*iter == NULL)
*iter = new drzewo(0);
if(ch == 'L')
iter = &((*iter)->lewy);
if(ch == 'R')
iter = &((*iter)->prawy);
}
}
drzewo** ite = &korzen;
cout << "Korzen wynosi " << (*ite)->liczba << endl;
}