/ Published in: C++
Expand |
Embed | Plain Text
struct elem { int label; int used; }; struct bt { struct elem elements[20000]; }; typedef int node; //funkcija vraca roditelja cvora n, a ako je n korijen, onda vraća null-cvor node ParentB(node n, bt *tree){ if (n==1){ cout<<"\nZa zadani korijen stabla, ne postoji odgovarajuci roditelj!"<<endl; return 0;} if(n%2) n--; return n/2; } //funkcija vraca lijevo dijete cvora n. Ako čvor n nema lijevog djeteta, onda vraća null-cvor node LeftChildB(node n, bt *tree){ if (tree->elements[n].used==0) return 0; if(tree->elements[2*n].used==1) return 2*n; else return 0; } //funkcija vraca desno dijete cvora n. Ako čvor n nema desnog djeteta, onda vraća null-cvor node RightChildB(node n, bt *tree){ if (tree->elements[n].used==0) return 0; if(tree->elements[2*n+1].used==1) return 2*n+1; else return 0; } //funkcija koja vraca oznaku (vrijednost) koju sadrži cvor n int LabelB(node n, bt *tree){ if (tree->elements[n].used==1){ return tree->elements[n].label; } else { cout<<"Cvor ne postoji ! "<<endl; return -1; } } //mijenja oznaku cvora n u stablu tree na vrijednost x int ChangeLabelB(int x, node n, bt *tree){ if(tree->elements[n].used==0){ cout<<"Cvor ne postoji u stablu ! "<<endl; return;} else {tree->elements[n].label=x; } } //funkcija koja vraca korijen binarnog stabla tree. Ako je stablo prazno,onda vraća null-cvor node RootB(bt *tree){ if(tree->elements[1].used) return 1; else {cout << "Stablo nema korijen, ne postoji!" << endl; return 0; } } //Procedura dodaje x kao lijevo dijete cvora n. //Ako cvor n već ima lijevo dijete, onda se javlja poruka pogreske. void CreateLeftB(int x, node n, bt *tree){ if(tree->elements[n].used==0 || tree->elements[2*n].used==1) { cout << "Pogreska!" << endl; return; } tree->elements[2*n].used=1; tree->elements[2*n].label=x; } //Procedura dodaje x kao desno dijete cvora n. //Ako cvor n već ima lijevo dijete, onda se javlja poruka pogreske. void CreateRightB(int x, node n, bt *tree){ if(tree->elements[n].used==0 || tree->elements[2*n+1].used==1) { cout << "Pogreska!" << endl; return; } tree->elements[2*n+1].used=1; tree->elements[2*n+1].label=x; } //procedura brise cvor n, a s njim i sve njegove potomke iz stabla T void DeleteB(node n, bt *tree){ if (tree->elements[n].used=1){ cout<<"\nNije dozvoljeno brisati korijen stabla!"; return 0; } else { if(LeftChildB(n,tree)) DeleteB(LeftChildB(n,tree),tree); if(RightChildB(n,tree)) DeleteB(RightChildB(n,tree),tree); } } //inicijalizira stablo tree s korijenom x bt* InitB(int x, bt *tree){ if(tree) delete tree; tree=new bt; for(int i=0; i<10000; i++) tree->elements[i].used=0; tree->elements[1].label=x; tree->elements[1].used=1; return tree; } }
You need to login to post a comment.
