二叉树的先中相关常用算法c语言版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
typedef char T;
typedef struct btnode //结点定义
{
T Element;
struct btnode *LChild,*RChild;
}BTNode;
typedef struct btree //头结点定义
{
struct btnode *Root;
}BTree;
BTNode* NewNode() //创建空间
{
BTNode *p=(BTNode*)malloc(sizeof(BTNode));
return p;
}
BTNode * DGCreateBT() //递归创建一棵二叉树{
char c;
BTNode *s;
//s=(BTNode *)malloc(sizeof(BTNode));
// c=getchar();
scanf("%c",&c);
getchar() ;
if(c=='.')
{
s=NULL;
}
else
{
//s=NewNode();
s=(BTNode *)malloc(sizeof(BTNode));
s->Element=c;
s->LChild=DGCreateBT();
s->RChild=DGCreateBT();
}
return s;
}
printf("%3c",p->Element);
}
void PreOrd(BTNode *t) //先序遍历递归函数
{
if(t)
{
(*Visit)(t);
PreOrd(t->LChild);
PreOrd(t->RChild);
}
}
void InOrd(BTNode *t) //中序遍历递归函数
{
if(t)
{
InOrd(t->LChild);
(*Visit)(t);
InOrd(t->RChild);
}
}
void PostOrd(BTNode *t) //后序遍历递归函数
{
if(t)
{
PostOrd(t->LChild);
PostOrd(t->RChild);
(*Visit)(t);
}
}
/*void PreOrder(BTree Bt,void (*Visit)(BTNode *u)) //先序遍历{
PreOrd(Visit,Bt.Root);
}
void InOrder(BTree Bt,void (*Visit)(BTNode *u)) //中序遍历{
InOrd(Visit,Bt.Root);
}
void PostOrder(BTree Bt,void (*Visit)(BTNode *u)) //后序遍历{
PostOrd(Visit,Bt.Root);
树的结点数
{
int s,s1,s2;
if(!p)
return 0;
else
{
s1=Size(p->LChild);
s2=Size(p->RChild);
s=s1+s2+1;
return s;
}
}
int SizeofBT(BTree Bt) //树的结点数
{
return Size(Bt.Root);
}
int Depth(BTNode *p) //树的高度递归函数
{
if(!p)
return 0;
else
return 1+max(Depth(p->LChild),Depth(p->RChild)); }
/*int DepthofBT(BTree Bt) //树的高度
{
return Depth(Bt.Root);
}*/
void PrintLeaf(BTNode *bt)
{
if(bt!=NULL)
{
if(bt->LChild==NULL&&bt->RChild==NULL)
{
printf("%3c",bt->Element);
}
else
{
PrintLeaf(bt->LChild);
PrintLeaf(bt->RChild);
}
}
{
int s1,s2;
if(bt!=NULL)
{
if(bt->LChild==NULL&&bt->RChild==NULL)
return 1;
else
{
s1=CountLeaf(bt->LChild);
s2=CountLeaf(bt->RChild);
return s1+s2;
}
}
return 0;
}
int main(void)
{
BTNode *bt;
BTree Bt;
int NumLeaf=0,TotalLeaf=0,TreeDepth=0,k=0;
bt=NewNode();
printf("请输入先序正确树的结点数据(输入. 代表空)\n");
//getchar() ;
bt=DGCreateBT();
printf("先序遍历测试结果:");
PreOrd(bt);
printf("\n中序遍历测试结果:");
InOrd(bt);
printf("\n后序遍历测试结果:");
PostOrd(bt);
printf("\n");
printf("\n树的叶子结点为:");
PrintLeaf(bt);///////////////////////////////////////
NumLeaf=Size(bt);
//////////////////////////////////////////////////////
// Bt.Root=bt;
// k=SizeofBT(Bt);
// printf("\nk=%d\n",k);
printf("\n树的结点数为:%d\n",NumLeaf);
//////////////////////////////////////////////////////
TotalLeaf=CountLeaf(bt);
printf("\n树的叶子结点数为:%d\n",TotalLeaf);
TreeDepth=Depth(bt);
printf("\n树的高度为:%d\n",TreeDepth);