Return to Snippet

Revision: 68494
at January 19, 2015 05:29 by maxxis95


Initial Code
struct el{
	int Label,FirstChild,NextSibling;
};
 
struct tree{
	el element[1000];
	int First;
};
 
tree *InitT(int X,tree *T){
	T = new tree;
	for(int i=0;i<1000;i++){
		T->element[i].Label = 0;
		T->element[i].FirstChild = T->element[i].NextSibling = -1;
	}
	T->element[X].Label = X;
	T->First = X;
	return T;
}
 
int FirstChildT(int X, tree *T){
	return T->element[X].FirstChild;
}
 
int NextSiblingT(int X, tree *T){
	return T->element[X].NextSibling;
}
 
int ParentT(int X, tree *T){
	for(int i=0;i<1000;i++){
		if(T->element[i].FirstChild==X) return i;
		if(T->element[i].NextSibling==X) return ParentT(i,T);
	}
}
 
int LabelT(int X, tree *T){
	return T->element[X].Label;
}
 
int ChangeLabelT(int X, int n, tree *T){
	if(X<0) return -1;
	else T->element[n].Label=X;
}
 
int RootT(tree *T){
	return 0;
}

void CreateT(int x, int n, tree *T){
	if(T->element[n].Label==0) cout << "Ne postoji cvor " << n << " !" << endl;
	else{
		if(T->element[n].FirstChild==-1) T->element[n].FirstChild = x;
		else if(T->element[T->element[n].FirstChild].NextSibling==-1) T->element[T->element[n].FirstChild].NextSibling = x;
		else{
			n = T->element[n].FirstChild;
			while(T->element[n].NextSibling!=-1) n = T->element[n].NextSibling;
			T->element[n].NextSibling = x;
		}
		T->element[x].Label = T->element[n].Label+1;
		T->element[x].FirstChild = T->element[x].NextSibling = -1;
	}
}

int DeleteT(int X, tree *T){
	if(X<0) return -1;
	else{
		if(T->element[X].FirstChild>0) DeleteT(T->element[X].FirstChild, T);
		else{
			T->element[X].Label=-1;
			T->First--;
		}
	}
}

Initial URL

                                

Initial Description
stablo

Initial Title
Opcenito stablo

Initial Tags

                                

Initial Language
C++