Return to Snippet

Revision: 38696
at January 6, 2011 07:21 by marmomcil


Initial Code
struct element{
	labeltype oznaka;
	int zapisan;
}; 

struct tstablo{
	struct element polje[10000];
};

typedef struct tstablo *tree;
typedef int node;

node ParentB(node n,tree stablo){
	if(n==1) return -1;	
	else return ((int)n/2);
}

node LeftChildB(node n,tree stablo){
	if (stablo->polje[2*n].zapisan) return 2*n;
	else return -1;
}

node RightChildB(node n,tree stablo){
	if (stablo->polje[2*n+1].zapisan) return(2*n+1);
	else return -1;
}

labeltype LabelB(node n,tree stablo){
	return(stablo->polje[n].oznaka);
}

void ChangeLabelB(labeltype x, node n,tree stablo){
	if (stablo->polje[n].zapisan) stablo->polje[n].oznaka = x;
	else return;
	}
}

node RootB(tree stablo){
	return 1;
}

void CreateLeftB(labeltype x,node n,tree stablo){
	if (stablo->polje[2*n].zapisan) return;
	else{
		stablo->polje[2*n].zapisan = -1;
		stablo->polje[2*n].oznaka = x;
	}
}

void CreateRightB(labeltype x,node n,tree stablo){
	if (stablo->polje[2*n+1].zapisan) return;
	else{
		stablo->polje[2*n+1].zapisan = -1;
		stablo->polje[2*n+1].oznaka = x;
	}
}

void DeleteB(node n,tree stablo){
	node i;
	stack S;
	if(!stablo->polje[n].zapisan) return;	         
	else{   					
	  MakeNullS(&S);   				
	  if (stablo->polje[2*n].zapisan) PushS(2*n,&S);        
	  if (stablo->polje[2*n+1].zapisan) PushS(2*n+1,&S);          
	  stablo->polje[n].zapisan=0;  
	  while(!IsEmptyS(&S)){   			
	        i=TopS(&S);  				
            PopS(&S);  				
            if (stablo->polje[2*i].zapisan) PushS(2*i,&S);   
            if (stablo->polje[2*i+1].zapisan) PushS(2*i+1,&S);     
	        stablo->polje[i].zapisan=0;  			
    }
}

void InitB(tree stablo, node x){
	for (int i=0;i<=9999;i++) stablo->polje[i].zapisan=-1;
	stablo->polje[1].oznaka=x;
	stablo->polje[1].zapisan=-1;
}

Initial URL


Initial Description
Header file bstablo_polje.h - odn. implementacija binarnog stabla pomoću polja

Initial Title
bstablo_polje.h - marmomcil

Initial Tags


Initial Language
C++