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

#include<stdlib.h>
#include<stdio.h>


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;
}








  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值