|
|
|
stablo_binarno_pokazivaci.h
0
stablo_binarno_pokazivaci.h
#include <iostream>
using namespace std;
struct element {
int label;
struct element *left, *right;
};
typedef struct element btree;
bool polje=false;
void InitB(int x, btree *BT) {
BT->label=x;
BT->left=NULL;
BT->right=NULL;
}
element *SearchB(int n, btree *BT) {
if (n==BT->label) {
return BT;
}
if (BT->left!=NULL)return SearchB(n, BT->left);
if (BT->right!=NULL)return SearchB(n, BT->right );
};
void CreateLeftB(int x, element *n, btree *BT) {
element *novi=new element;
if (n->left!=NULL) {
cout<<"Dijete vec postoji!\n";
return;
}
n->left=novi;
novi->label=x;
novi->left=NULL;
novi->right=NULL;
};
void CreateRightB(int x, element *n, btree *BT) {
element *novi=new element;
if (n->right!=NULL) {
cout<<"Dijete vec postoji!\n";
return;
}
n->right=novi;
novi->label=x;
novi->left=NULL;
novi->right=NULL;
};
element *LeftChildB(int n, btree *BT) {
element *roditelj=SearchB(n,BT);
if (roditelj->left==NULL) {
cout<<"Greska! Dijete ne postoji!\n";
roditelj->label=-1;
return roditelj;
}
else {
roditelj=roditelj->left;
return roditelj;
}
};
element *RightChildB(int n, btree *BT) {
element *roditelj=SearchB(n,BT);
if (roditelj->right==NULL) {
cout<<"Greska! Dijete ne postoji!\n";
roditelj->label=-1;
return roditelj;
}
else {
roditelj=roditelj->right;
return roditelj;
}
};
element RootB(btree *BT) {
element ispis;
ispis.label=BT->label;
return ispis;
};
element *ParentB(int n, btree *BT) {
element *roditelj=NULL;
if (n==BT->label) {
cout<<"Odabrali ste korijen!\n";
return NULL;
}
else {
if (BT->left) {
if (BT->left->label==n) return BT;
else roditelj=ParentB(n,BT->left);
}
if (BT->right) {
if (BT->right->label==n) return BT;
else roditelj=ParentB(n,BT->left);
}
}
return roditelj;
};
int LabelB(element *n, btree *BT) {
return n->label;
}
void ChangeLabelB(int x, element *n, btree *BT) {
n->label=x;
}
void DeleteB(element *n, btree *BT) {
static bool brisanje=true;
if(brisanje) {
element *roditelj=ParentB(n->label,BT);
if(roditelj->left==n) roditelj->left=NULL;
else roditelj->right=NULL;
brisanje=false;
}
if(n->left)DeleteB(n->left,BT);
if(n->right)DeleteB(n->right,BT);
delete n;
}
using namespace std;
struct element {
int label;
struct element *left, *right;
};
typedef struct element btree;
bool polje=false;
void InitB(int x, btree *BT) {
BT->label=x;
BT->left=NULL;
BT->right=NULL;
}
element *SearchB(int n, btree *BT) {
if (n==BT->label) {
return BT;
}
if (BT->left!=NULL)return SearchB(n, BT->left);
if (BT->right!=NULL)return SearchB(n, BT->right );
};
void CreateLeftB(int x, element *n, btree *BT) {
element *novi=new element;
if (n->left!=NULL) {
cout<<"Dijete vec postoji!\n";
return;
}
n->left=novi;
novi->label=x;
novi->left=NULL;
novi->right=NULL;
};
void CreateRightB(int x, element *n, btree *BT) {
element *novi=new element;
if (n->right!=NULL) {
cout<<"Dijete vec postoji!\n";
return;
}
n->right=novi;
novi->label=x;
novi->left=NULL;
novi->right=NULL;
};
element *LeftChildB(int n, btree *BT) {
element *roditelj=SearchB(n,BT);
if (roditelj->left==NULL) {
cout<<"Greska! Dijete ne postoji!\n";
roditelj->label=-1;
return roditelj;
}
else {
roditelj=roditelj->left;
return roditelj;
}
};
element *RightChildB(int n, btree *BT) {
element *roditelj=SearchB(n,BT);
if (roditelj->right==NULL) {
cout<<"Greska! Dijete ne postoji!\n";
roditelj->label=-1;
return roditelj;
}
else {
roditelj=roditelj->right;
return roditelj;
}
};
element RootB(btree *BT) {
element ispis;
ispis.label=BT->label;
return ispis;
};
element *ParentB(int n, btree *BT) {
element *roditelj=NULL;
if (n==BT->label) {
cout<<"Odabrali ste korijen!\n";
return NULL;
}
else {
if (BT->left) {
if (BT->left->label==n) return BT;
else roditelj=ParentB(n,BT->left);
}
if (BT->right) {
if (BT->right->label==n) return BT;
else roditelj=ParentB(n,BT->left);
}
}
return roditelj;
};
int LabelB(element *n, btree *BT) {
return n->label;
}
void ChangeLabelB(int x, element *n, btree *BT) {
n->label=x;
}
void DeleteB(element *n, btree *BT) {
static bool brisanje=true;
if(brisanje) {
element *roditelj=ParentB(n->label,BT);
if(roditelj->left==n) roditelj->left=NULL;
else roditelj->right=NULL;
brisanje=false;
}
if(n->left)DeleteB(n->left,BT);
if(n->right)DeleteB(n->right,BT);
delete n;
}




There are currently no comments for this snippet.