Dodawanie węzła do drzewa BST

0

Witam wszystkich, piszę sobie program wykożystujący drzewo, i mam problem z funkcją tworzącą to drzewo, lub też tylko z funkcją dodającą węzły. Sam nie wiem, ale było by mi bardzo miło, gdyby ktoś powiedział lub chociaż mnie naprowadził gdzie tkwi problem:


struct Skr {Swi* pocz; Swi* kon; int wag; int nr_d;}; //krawedz
struct Sga {Skr* kr; Sga* p; Sga* l;};    //wezel

 void tw_dr(ifstream &iplik, Swi* wi_tab, Sga* &korzen) //funkcja tworząca drzewo 
{

Sga* nowy= new Sga;
while (!iplik.eof())
{nowy->kr= zplk(iplik, wi_tab);
nowy->l=NULL;
nowy->p=NULL;
test(korzen, nowy);
cout<<"dodano do drzewa"<<endl;
}
return;
}

void dod_do_drz2(Sga* &korzen, Sga* nowy) //funkcja dodająca węzeł do drzewa
{
Sga* tmp= korzen;
while(true)
{
if (tmp->kr->wag>=nowy->kr->wag)
    {if (tmp->p==NULL)
        {tmp->p=nowy; break;}
    else
    tmp=tmp->p;
    }
else
    {
    if (tmp->l==NULL)
        {tmp->l=nowy; break;}
    else tmp=tmp->l;
    }

}
}

drzewo ma być uporządkowane ze względu na wartość wag no wiec... czemu to nie działa?
kiedy chce wyświetlić drzewo, funkcją

void WyswietlDrzewo (Sga* wezel)
{if (wezel != NULL)
    {

    WyswietlDrzewo (wezel->l);
    cout<< wezel->kr->pocz->nr<< '\t'<<wezel->kr->kon->nr <<'\t'<< wezel->kr->wag<<endl;
    WyswietlDrzewo (wezel->p);
    }
return;
}
 

wyświetla mi jedynie 3 liczby które nie mogą być poprawne, bo nie ma takiej kombinacji w pliku z którego pobieram wartości, aż program sie wykrzacza.

0

Alokujesz pamięć tylko dla 1 węzła

0

a, zapomniałem wkleić funkcji

 Skr* zplk (ifstream & iplik, Swi* wi_tab)
{
int po;
int ko;
Skr* kr= new Skr;
iplik>>po;
kr->pocz=&wi_tab[po];
iplik>>ko;
kr->kon=&wi_tab[ko];
kr->nr_d=-1;
iplik>>kr->wag;

cout<<kr->pocz->nr<<'\t'<<kr->kon->nr<<'\t'<<kr->wag<<endl;
return kr;
}

wydaje mi się ze tutaj alokuję pamięć na kazdy węzeł (Sga)?
albo i nie,

 void tw_dr(ifstream &iplik, Swi* wi_tab, Sga* &korzen)
{


while (!iplik.eof())
{
Sga* nowy= new Sga;
nowy->kr= zplk(iplik, wi_tab);
nowy->l=NULL;
nowy->p=NULL;
dod_do_drz2(korzen, nowy);
cout<<"dodano do drzewa"<<endl;
}
return;
}

edit1: przeniosłem twozenie i deklaracje "nowego" do pętli, i prawie działa:D
edit2: ok, działa, miałem w pliku wejsciowym pusty wiersz, ktory sprawiał że wskazniki wariowały. nie wiem czy sie smiac czy niszczyc przedmioty na okolo mnieD:
bardzo dziekuje za pomoc.

0
while (!iplik.eof())

http://www.gidnetwork.com/b-58.html

Dlaczego szyfrujesz kod za pomocą takich fajnych nazw zmiennych? :P No i może warto by było pomyśleć o takich ekstrawagancjach jak konstruktory... :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1