永发信息网

c语言版数据结构问题

答案:1  悬赏:70  手机版
解决时间 2021-04-27 10:02
  • 提问者网友:别再叽里呱啦
  • 2021-04-26 10:57
实现二叉树的基本操作,按先序遍历建立二叉树,再中 后序遍历二叉树,而后统计二叉树中叶子结点的个数,求二叉树的深度,最后销毁二叉树。带主函数。
最佳答案
  • 五星知识达人网友:街头电车
  • 2021-04-26 11:36
#include <stdio.h>//头文件
#include <stdlib.h>
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}
BiTNode,*BiTree;//定义结点类型
BiTree CreateBiTree()//创建树
{
char p;BiTree T;
scanf("%c",&p);
if(p==' ')
T=NULL;
else
{
T=(BiTNode *)malloc(sizeof(BiTNode));//为结点开辟空间
T->data=p;
T->lchild=CreateBiTree();
T->rchild=CreateBiTree();
}
return (T);
}
void InOrder(BiTree T)//中序
{
if(T!=NULL)
{
InOrder(T->lchild);
printf("%c",T->data);
InOrder(T->rchild);

}

}
void PostOrder(BiTree T)//后序
{
if(T!=NULL)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%c",T->data);
}
}
int Nochild(BiTree T)//叶子结点
{
int num1,num2;
if(T==NULL)
return(0);
if(T->lchild==NULL&&T->rchild==NULL)
return(1);
num1=Nochild(T->lchild);
num2=Nochild(T->rchild);
return(num2+num1);
}
int Depth(BiTree T)
{

if(T==NULL)
return(0);
else
return 1+(Depth(T->lchild)>Depth(T->rchild)? Depth(T->lchild):Depth(T->rchild));
}
void Distroy(BiTree& T)//销毁
{
if(T!=NULL)
{
BiTree L,R;
L=T->lchild;
R=T->rchild;
printf("%c销毁成功!\n",T->data);
free(T);
T=NULL;
Distroy(L);
Distroy(R);
}
}
void main()//主函数
{
BiTree Ta;
int num;
Ta=CreateBiTree();
printf("中序遍历:");
printf("\n");
InOrder(Ta);
printf("\n");
printf("后序遍历:");
printf("\n");
PostOrder(Ta);
printf("\n");
num=Nochild(Ta);
printf("叶子数为:%d\n",num);
printf("深度为:%d\n",Depth(Ta));
Distroy(Ta);
printf("销毁后深度为:%d\n",Depth(Ta));
}
花了一点时间帮你编出来了,也让我复习了一下《数据结构》。是用递归编的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯