Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstdlib>
- using namespace std;
- int licznik_k=0;
- int licznik_s_w=0;
- class Kulka
- {
- int v,stan;
- Kulka *lewy,*prawy,*ojciec;
- public:
- Kulka()
- {
- v=rand()%100;
- cout<<"K: "<<v<<endl;
- lewy=NULL;
- prawy=NULL;
- ojciec=NULL;
- licznik_k++;
- stan=0;
- }
- void dodaj(Kulka *nowa)
- {
- if (nowa->v<v)
- {
- if (lewy==NULL)
- {
- lewy=nowa;
- nowa->ojciec=this;
- }
- else
- lewy->dodaj(nowa);
- }
- else
- {
- if (prawy==NULL)
- {
- prawy=nowa;
- nowa->ojciec=this;
- }
- else
- prawy->dodaj(nowa);
- }
- }
- void show_while(Kulka *temp)
- {
- while(licznik_s_w!=licznik_k)
- {
- switch(temp->stan)
- {
- case 0:
- if (temp->lewy)
- {
- temp->stan++; // zaznaczam, ze juz poszedlem w lewo
- temp=temp->lewy; // pojde w lewo
- }
- else // nie mam lewego. Wyswietle siebie i popracuje nad prawym
- temp->stan++;
- break;
- case 1:
- cout<<endl<<"Pyk,pyk: "<<temp->v; // nie mam lewego, albo juz go wyswietlilem, wiec wyswietle siebie
- licznik_s_w++;
- temp->stan++; // zaznacze to, dajac stan na 2
- break;
- case 2: // nie mam lewego, albo go wyswietlilem, siebie wyswietlilem, to pracuje nad prawym
- if (temp->prawy) // zobacze, czy mam prawego
- {
- temp->stan++;// zaznacze, ze poszedlem juz w prawo, zanim w ogole pojde
- temp=temp->prawy; // ide do prawego
- }
- else
- temp->stan=4; // nie mam prawego, pojde do gory. Pomine stan=3
- break;
- case 3:// lewego nie mam, albo juz na nim bylem, bylem na prawym, to ide do gory
- temp->stan++;
- case 4: // nie mam prawego, ide do gory
- temp=temp->ojciec;
- break;
- }
- }
- }
- };
- int main()
- {
- Kulka *root=new Kulka();
- Kulka *nowa=NULL;
- Kulka *temp=root;
- for (int i=0; i<19; i++)
- {
- nowa=new Kulka();
- root->dodaj(nowa);
- }
- cout<<"\n\nStworzylem "<<licznik_k<<" elementow."<<endl;
- root->show_while(temp);
- cout<<"\n\nPokazalem "<<licznik_s_w<<" elementow."<<endl;
- }
Add Comment
Please, Sign In to add comment