/ Published in: C++
                    
                                        
binarno stablo implementacija uz pomoc pokazivaca
                
                            
                                Expand |
                                Embed | Plain Text
                            
                        
                        Copy this code and paste it in your HTML
#include<iostream>
#include <cstring>
using namespace std;
struct element
{
string label;
struct element *left, *right;
};
typedef element *node;
typedef element btree;
//vrati prvo lijevo dijete zadanog cvora
node LeftChildB(btree *stablo, node n)
{
return n->left;
}
//vrati prvo desno dijete zadanog cvora
node RightChildB(btree *stablo, node n)
{
return n->right;
}
//ispisi oznaku koja se nalazi na zadanom cvoru
void LabelB(btree *stablo, node n)
{
cout<<"Oznaka na zadanome cvoru je : "<< n->label<<endl;
}
void ChangeLabelB(string nova_vrijednost,node cvor, btree *stablo) {
if(cvor==NULL)
return;
cout<<"Mijenjam vrijednost "<<cvor->label<<"\nu novu vrijednost: "<<nova_vrijednost<<endl;
cvor->label = nova_vrijednost;
}
//vrati korijen stabla
node RootB(btree *stablo)
{
return stablo;
}
node ParentB(btree *stablo, node n) {
if (n == stablo)//ako je cvor ==korijenu vrati 0
return NULL;
node roditelj = NULL; //pom varijabla za roditelja
if (stablo->left) {//ako trenutno stablo ima lijeve dijece idi lijevo
if (stablo->left == n)
return stablo; //ako je prvo lijevo dijete TRENUTNOG stabla jednako n vrati trenutni "korijen" stabla
else
roditelj = ParentB(n, stablo->left);//ako nije pronadjen "roditelj" idi dublje u stablo rekurzijom
}
if(stablo->right) {//ako trenutno stablo ima desne dijece idi desno
if (stablo->right == n)
return stablo;
else
roditelj = ParentB(n, stablo->right);
}
return roditelj; //ako stablo nema ni lijeve ni desne dijece vratit ce 0
}
void CreateLeftB(btree *stablo, node n, string x)
{
if(n->left!=NULL)
{
cout <<"Cvor vec ima dijete...\n" << endl;
return;
}
else
{
node lijevo = new element;
lijevo->left = NULL;
lijevo->right = NULL;
lijevo->label = x;
n->left = lijevo;
}
}
void CreateRightB(btree *stablo, node n, string x)
{
if(n->right != NULL){
cout <<"Cvor vec ima desno dijete...\n" << endl;
return;
}
else
{
node desno = new element;
desno->left = NULL;
desno->right = NULL;
desno->label = x;
n->right = desno;
}
}
void brisi(btree *stablo, node n)
{
if(n->left != NULL)
brisi(stablo,LeftChildB(stablo,n));
if(n->right != NULL)
brisi(stablo,RightChildB(stablo,n));
delete n;
}
void DeleteB(btree *stablo, node n)
{
node pom;
//nadji roditelja elementa kojeg zelimo brisati i snimamo ga u pom
pom = ParentB(stablo,n);
if(LeftChildB(stablo,pom)==n)//ako je to lijevo dijete
{
pom->left = NULL;//taj pokazivac stavljamo na 0
}
else
{
pom->right = NULL;//ako je desno onda taj pokazivac stavljamo na 0
}
brisi(stablo,n);//brisemo cvor n i svo njegovo "potomstvo"
}
void InitB (string x, node n){
n->label=x;
n->right=NULL;
n->left=NULL;
}
Comments
 Subscribe to comments
                    Subscribe to comments
                
                