一个关于二叉树的创建、先序遍历、中序遍历、后序遍历、求叶子节点的完整函数的c语言完整程序。

#include
#include


typedef struct bitnode{
	int date;
	struct bitnode * lchild, *rchild;
}bitnode,*bitree;
int j=0;
//   函数说明
bitree *createbitree(bitree *T);
int Qtraversebitree(bitree T);
int Ztraversebitree(bitree T);
int Htraversebitree(bitree T);
int Ftraversebitree(bitree T);
/*******************主函数****************************/


main()
{
	bitree Tree,*T ; int k;
     do                                 
	{
		printf("\n        ╔-----------------------------------------------╗");                                  //显示一个简易菜单
		printf("\n        ┆      先序创建----1     先序遍历------2        ┆");
		printf("\n        ┆      中序遍历----3     后序遍历------4        ┆");
		printf("\n        ┆      叶子个数--- 5     退出程序------6        ┆");
		printf("\n        ╚-----------------------------------------------╝\n"); 
		printf("请输入所要进行的操作序号:  ");
		scanf("%d",&k);                                   //接受用户的选择
		switch(k)                                           //接受用户的函数    
		{case 1: printf("左右子树为空时用0代替,用间隔符隔开:\n");
		       T=createbitree(&Tree);
		       break;
		 case 2:Qtraversebitree(*T );
			    break;
	     case 3:Ztraversebitree(*T );
		        break;
		 case 4:Htraversebitree(*T );
		        break;
		 case 5:printf("\n叶子个数为: %d\n",Ftraversebitree(*T ));
			    break;
		 case 6:break;
		default:printf("错误选择!请重选\n");break;
		}
	}while(k!=6);   	//直到i被赋值为6
	return 0;  


}
/*******************创建二叉树函数****************************/
bitree *createbitree(bitree *T)
{
	char ch;
	scanf("%d",&ch);
	if(ch==0) 
		(*T)=NULL;
	else{ 
		if(!((*T) =(bitnode *)malloc(sizeof(bitnode))))
			exit(0);
		(*T)->date = ch;  //生成根节点 
		createbitree(&(*T)->lchild);
		createbitree(&(*T)->rchild);
	}
  return T;
}






/*******************先序遍历函数****************************/
Qtraversebitree(bitree T)
{                                         
	if(T){printf("%d ",T->date);
	     if(Qtraversebitree(T->lchild))
		     if(Qtraversebitree(T->rchild)) return 1;
	return 0;
	}
	else return 1;
}
/*******************中序遍历函数****************************/ 
Ztraversebitree(bitree T)
{                                         
	if(T){if(Ztraversebitree(T->lchild))
			 printf("%d ",T->date);
		        if(Ztraversebitree(T->rchild)) return 1;
	return 0;
	}
	else return 1;
}
/*******************后序遍历函数****************************/
Htraversebitree(bitree T)
{                                         
	if(T){if(Htraversebitree(T->lchild))
			if(Htraversebitree(T->rchild)) 
				printf("%d ",T->date); return 1;
	return 0;
	}
	else return 1;
}


/******************返回叶子节点个数函数*************/
Ftraversebitree(bitree T)
{                                      
	if(T){if(!((T->lchild)||(T->rchild))) j++; 
	     if(Ftraversebitree(T->lchild))
		     if(Ftraversebitree(T->rchild)) return j;
	return j;
	}
	else return j;
}








你可能感兴趣的:(算法系列)