Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct element{
- int label;
- int used;
- };
- struct bt{
- element elements[10000];
- };
- typedef int node;
- bt* InitB(int x, bt* T){
- if(T) delete T;
- T = new bt;
- for(int i = 0; i < 10000; i++)
- T->elements[i].used = 0;
- T->elements[1].label = x;
- T->elements[1].used = 1;
- return T;
- }
- void CreateLeftB(int x, node n, bt* T){
- if(T->elements[n].used == 0 || T->elements[2*n].used == 1) {
- cout << "Greska" << endl << endl;
- return;
- }
- T->elements[2*n].used = 1;
- T->elements[2*n].label = x;
- }
- void CreateRightB(int x, node n, bt* T){
- if(T->elements[n].used == 0 || T->elements[2*n+1].used == 1){
- cout << "Greska" << endl << endl;
- return;
- }
- T->elements[2*n+1].used = 1;
- T->elements[2*n+1].label = x;
- }
- node LeftChildB(node n, bt* T){
- if(T->elements[n].used == 0)
- return 0;
- if(T->elements[2*n].used == 1)
- return 2*n;
- else return 0;
- }
- node RightChildB(node n, bt* T){
- if(T->elements[n].used == 0) return 0;
- if(T->elements[2*n+1].used == 1) return 2*n+1;
- else return 0;
- }
- node ParentB(node n, bt* T){
- if(n == 1) return 0;
- if(n%2) n--;
- return n/2;
- }
- int LabelB(node n, bt* T){
- return T->elements[n].label;
- }
- void ChangeLabelB(int x, node n, bt* T){
- if(T->elements[n].used == 0) return;
- T->elements[n].label = x;
- }
- node RootB(bt* T){
- if(T->elements[1].used == 0) return 0;
- return 1;
- }
- void DeleteB(node n, bt* T){
- T->elements[n].used = 0;
- if (LeftChildB(n, T)) DeleteB(LeftChildB(n, T), T);
- if (RightChildB(n, T)) DeleteB(RightChildB(n, T), T);
- }
Add Comment
Please, Sign In to add comment