Zaglavlje za stablo, pokazivači





0
Date Submitted Fri. Jan. 27th, 2012 4:42 PM
Revision 1 of 1
Beginner zjakupec
Tags pokazivači | stablo
Comments 0 comments
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;
        }


 

Zdravko Jakupec

Comments

There are currently no comments for this snippet.

Voting

Votes Up


Votes Down