數據結構——樹(二叉樹代碼總結)上

/*二分查找即爲判定樹*/ 
int binarysearch(list tbl,elementtype k)
{
	int left,right,mid,nofound=-1;
	left=1;
	right=tbl->length;
	while(left<=right)
	{
		mid=(left+right)/2;
		if(k<tbl->element[mid]) right=mid-1;
		else if(k>tbl->element[mid]) left=mid+1;
		else return mid;
	}
	return notfound;
 } 
//樹的各種操作
//鏈表的數據結構
typedef struct treenode *bintree;
typedef bintree position;
struct treenode{
	elementtype data;
	bintree left;
	bintree right;
}
 //二叉樹的遍歷
 //先序遍歷
 void preordertraversal(bintree bt)
 {
 	if(bt)
 	{
 		printf("%d",bt->data);
 		preordertraversal(bt->left);
 		preordertraversal(bt->right);
	 }
 }
 //中序遍歷
 void inordertraversal(bintree bt)
 {
 	if(bt)
 	{
 		inordertraversal(bt->left);
 		printf("%d",bt->data);
 		intordertraversal(bt->right);
	 }
  } 
 //後序遍歷
 void  postordertraversal(bintree bt)
 {
 	if(bt)
 	{
 		postordertraversal(bt->left);
 		postordertraversal(bt->right);
 		printf("%d",bt->data);	
	 }
 }
 //二叉樹的非遞歸遍歷
 //中序遍歷非遞歸遍歷算法, 使用堆棧
  void inordertraversal(bintree bt)
  {
  	bintree t=bt;
  	stack s=creatstack(maxsize);//創建並初始化堆棧S 
  	while(t||!isempty(s))
  	{
  		while(t) //一直向左並將沿途節點壓入堆棧 
  		{
  			push(s,t);
  			t=t->left;
		}
		if(!isempty(s))
		{
			t=pop(s);  //節點彈出堆棧  
			printf("%5d",t->data); //訪問並打印節點 
			t=t->right;//轉向 右子樹 
		 } 
	  }
  }
  //先序遍歷非遞歸遍歷算法, 使用堆棧
  void inordertraversal(bintree bt)
  {
  	bintree t=bt;
  	stack s=creatstack(maxsize);//創建並初始化堆棧S 
  	while(t||!isempty(s))
  	{
  		while(t) //一直向左並將沿途節點壓入堆棧 
  		{
  			printf("%5d",t->data); //訪問並打印節點 
  			push(s,t);
  			t=t->left;
		}
		if(!isempty(s))
		{
			t=pop(s);  //節點彈出堆棧  
			t=t->right;//轉向 右子樹 
		 } 
	  }
  }
  //層序遍歷
   /*隊列實現  節點出隊,訪問該節點,其左右兒子入隊*/
    void levelordertraversal(bintree bt)
	{
		queue q;
		bintree t;
		if(!bt) return ;//如果是空樹,直接返回
		q=creatqueue(maxsize); //創建並初始化隊列q 
		addq(q,bt);
		while(!isemptyq(q))
		{
			t=deleteq(q);
			printf("%d\n",t->data);//訪問去除隊列的節點 
			if(t->left) addq(q,t->left);
			if(t->right) addq(q,t->right);
		 } 
	 } 
  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章