|
|
|
Zaglavlje za stablo, pokazivači
0
Datoteka zaglavlja za C++ programsko riješenje sa definicijama za operacije sa binarnim stablima
#include <iostream>
using namespace std;
struct tree
{
double label;
tree *lijevo, *desno;
};
typedef tree *element;
element InitB(int root, tree *stablo)
{
stablo=new tree;
stablo->label=root;
stablo->lijevo=NULL;
stablo->desno=NULL;
}
void DeleteB(tree *node, tree *stablo)
{ if (node==stablo) {cout<<"Korijen se nemoze obrisati."<<endl; return;}
if (node->lijevo!=NULL) DeleteB (node->lijevo, stablo);
if (node->desno!=NULL) DeleteB (node->desno, stablo);
if (node!=RootB(stablo) && LeftChildB(ParentB(node,stablo),stablo)==node) ParentB(node,stablo)->lijevo=NULL;
else if (node!=RootB(stablo)) ParentB(node,stablo)->desno=NULL;
delete node;
}
element LeftChildB(tree *node, tree *stablo)
{
if(node==NULL) cout<<"Lijevo dijete ne postoji"<<endl;
else return node->lijevo;
}
element RightChildB(tree *node, tree *stablo)
{
if(node==NULL) cout<<"Desno dijete ne postoji"<<endl;
else return node->desno;
}
double LabelB(tree *node,tree *stablo)
{
if(node==NULL) cout<<"Cvor ne postoji"<<endl;
else return node->label;
}
element RootB(tree *stablo)
{
if(stablo) return stablo;
else cout<<"Stablo ne postoji"<<endl;
}
element ParentB(tree *node, tree *stablo)
{
if(node==stablo) cout<<"Cvor je korijen"<<endl;
else{
tree *node2=NULL;
if(stablo->lijevo){
if(stablo->lijevo==node) return stablo;
node2=ParentB(node,stablo->lijevo);
}
if(stablo->desno){
if(stablo->desno==node) return stablo;
node2=ParentB(node,stablo->desno);
}
return node2;
}
}
void CreateLeftB(int label, tree *node, tree *stablo)
{
if(node->lijevo!=NULL) cout<<"Dijete vec postoji"<<endl;
else
{
tree *novi=new tree;
novi->desno=NULL;
novi->lijevo=NULL;
novi->label=label;
node->lijevo=novi;
}
}
void CreateRightB(int label, tree *node, tree *stablo)
{
if(node->desno!=NULL) cout<<"Dijete vec postoji"<<endl;
else
{
tree *novi=new tree;
novi->desno=NULL;
novi->lijevo=NULL;
novi->label=label;
node->desno=novi;
}
}
void ChangeLabelB(int label, tree *node, tree *stablo)
{
if(!stablo) cout<<"Nije moguce promjeniti label - odaberite ponovo"<<endl;
else node->label=label;
}
element NodeB(int br, tree *stablo){
tree *tekuci,*tekuci2;
tekuci=stablo;
while(tekuci){
if(tekuci->label==br)return tekuci;
else tekuci=tekuci->desno;
}
tekuci2=stablo;
while(tekuci2){
if(tekuci2->label==br) return tekuci2;
else tekuci2=tekuci2->lijevo;
}
cout<<"Nije nadjen nijedan cvor (node)"<<endl;
tree *zadnji;
zadnji=stablo;
while(zadnji->lijevo){
zadnji=zadnji->lijevo;
}
return zadnji;
}
using namespace std;
struct tree
{
double label;
tree *lijevo, *desno;
};
typedef tree *element;
element InitB(int root, tree *stablo)
{
stablo=new tree;
stablo->label=root;
stablo->lijevo=NULL;
stablo->desno=NULL;
}
void DeleteB(tree *node, tree *stablo)
{ if (node==stablo) {cout<<"Korijen se nemoze obrisati."<<endl; return;}
if (node->lijevo!=NULL) DeleteB (node->lijevo, stablo);
if (node->desno!=NULL) DeleteB (node->desno, stablo);
if (node!=RootB(stablo) && LeftChildB(ParentB(node,stablo),stablo)==node) ParentB(node,stablo)->lijevo=NULL;
else if (node!=RootB(stablo)) ParentB(node,stablo)->desno=NULL;
delete node;
}
element LeftChildB(tree *node, tree *stablo)
{
if(node==NULL) cout<<"Lijevo dijete ne postoji"<<endl;
else return node->lijevo;
}
element RightChildB(tree *node, tree *stablo)
{
if(node==NULL) cout<<"Desno dijete ne postoji"<<endl;
else return node->desno;
}
double LabelB(tree *node,tree *stablo)
{
if(node==NULL) cout<<"Cvor ne postoji"<<endl;
else return node->label;
}
element RootB(tree *stablo)
{
if(stablo) return stablo;
else cout<<"Stablo ne postoji"<<endl;
}
element ParentB(tree *node, tree *stablo)
{
if(node==stablo) cout<<"Cvor je korijen"<<endl;
else{
tree *node2=NULL;
if(stablo->lijevo){
if(stablo->lijevo==node) return stablo;
node2=ParentB(node,stablo->lijevo);
}
if(stablo->desno){
if(stablo->desno==node) return stablo;
node2=ParentB(node,stablo->desno);
}
return node2;
}
}
void CreateLeftB(int label, tree *node, tree *stablo)
{
if(node->lijevo!=NULL) cout<<"Dijete vec postoji"<<endl;
else
{
tree *novi=new tree;
novi->desno=NULL;
novi->lijevo=NULL;
novi->label=label;
node->lijevo=novi;
}
}
void CreateRightB(int label, tree *node, tree *stablo)
{
if(node->desno!=NULL) cout<<"Dijete vec postoji"<<endl;
else
{
tree *novi=new tree;
novi->desno=NULL;
novi->lijevo=NULL;
novi->label=label;
node->desno=novi;
}
}
void ChangeLabelB(int label, tree *node, tree *stablo)
{
if(!stablo) cout<<"Nije moguce promjeniti label - odaberite ponovo"<<endl;
else node->label=label;
}
element NodeB(int br, tree *stablo){
tree *tekuci,*tekuci2;
tekuci=stablo;
while(tekuci){
if(tekuci->label==br)return tekuci;
else tekuci=tekuci->desno;
}
tekuci2=stablo;
while(tekuci2){
if(tekuci2->label==br) return tekuci2;
else tekuci2=tekuci2->lijevo;
}
cout<<"Nije nadjen nijedan cvor (node)"<<endl;
tree *zadnji;
zadnji=stablo;
while(zadnji->lijevo){
zadnji=zadnji->lijevo;
}
return zadnji;
}




There are currently no comments for this snippet.