二叉树的先中相关常用算法c语言版

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档