#include<stdio.h>
#include<malloc.h>
typedef struct bitnode{
int date;
struct bitnode *lchild,*rchild;
}BiTNode,*BiTree;
int sum=0;
void CreateBiTree(BiTree &T)
{
int e;
scanf("%d",&e);
if(e==0)
{
T=NULL;
}
else
{
T=(BiTNode*)malloc(sizeof(BiTNode));
T->date=e;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void PreOrder(BiTree &T)
{
if(T==NULL)
return;
printf("%d ",T->date);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
void InOrder(BiTree &T)
{
if(T==NULL)
return;
InOrder(T->lchild);
printf("%d ",T->date);
InOrder(T->rchild);
}
void PostOrder(BiTree &T)
{
if(T==NULL)
return;
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%d ",T->date);
}
void Nodecount(BiTree &T)
{
if(T==NULL)
return ;
else if(T->lchild==NULL&&T->rchild==NULL)
{
sum++;
}
else
{
Nodecount(T->lchild);
Nodecount(T->rchild);
}
}
void change(BiTree &T)
{
BiTree temp;
if(T->lchild==NULL&&T->rchild==NULL)
return ;
else
{temp=T->lchild;
T->lchild=T->rchild;
T->rchild=temp;
}
change(T->lchild);
change(T->rchild);
}
int main()
{
int n;
BiTNode *T;
T=NULL;
printf("\t\t\t目录\n");
printf("\t1、扩充先序序列构建二叉树\n");
printf("\t2、先序遍历二叉树\n");
printf("\t3、中序遍历二叉树\n");
printf("\t4、后序遍历二叉树\n");
printf("\t5、求二叉树叶结点个数\n");
printf("\t6、二叉树左右子树交换\n");
printf("\t7、退出\n");
while(1)
{
printf("输入操作选项:");
scanf("%d",&n);
switch(n)
{
case 1:printf("输入二叉树数据\n"),CreateBiTree(T);break;
case 2:PreOrder(T),puts("");break;
case 3:InOrder(T),puts("");break;
case 4:PostOrder(T),puts("");break;
case 5:Nodecount(T),printf("%d\n",sum);break;
case 6:change(T);break;
case 7:return 0;
}
}
}
二叉树数据结构
最新推荐文章于 2021-11-14 08:00:00 发布