C语言递归实现二叉树的建立

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言递归实现二叉树的建立,先序,中序,后序遍历操作及结点数和树的高度计算

#include

#define ElemType char

//节点声明,数据域、左孩子指针、右孩子指针

typedef struct BiTNode{

char data;

struct BiTNode *lchild,*rchild;

}BiTNode,*BiTree;

//先序建立二叉树

BiTree CreateBiTree(){

char ch;

BiTree T;

scanf("%c",&ch);

if(ch=='#')T=NULL;

else{

T = (BiTree)malloc(sizeof(BiTNode));

T->data = ch;

T->lchild = CreateBiTree(); T->rchild = CreateBiTree(); }

return T;//返回根节点

}

//先序遍历二叉树

void PreOrderTraverse(BiTree T){

if(T){

printf("%c",T->data);

PreOrderTraverse(T->lchild);

PreOrderTraverse(T->rchild); }

}

//中序遍历

void InOrderTraverse(BiTree T){

if(T){

InOrderTraverse(T->lchild); printf("%c",T->data);

InOrderTraverse(T->rchild); }

}

//后序遍历

void PostOrderTraverse(BiTree T){

if(T){

PostOrderTraverse(T->lchild);

PostOrderTraverse(T->rchild);

printf("%c",T->data);

}

}

//求树的结点数

int numofnode(BiTree T)

{

if (NULL == T)

return 0;

else

return (numofnode(T->lchild) +

numofnode(T->rchild)+1); }

//求树的深度

int depth(BiTree T)

{

int h,lh,rh;

if (NULL == T)

h = 0;

else

{

lh=depth(T->lchild);

rh=depth(T->rchild);

if (lh >= rh)

h = lh+1;

else

h = rh+1;

}

return h;

}

//求叶子结点数

int leafNum(BiTree T) {

int Lleaf,Rleaf;

if(T==NULL) return 0;

else if(T->lchild==NULL&&T->rchild==NULL) return 1; else

{

Lleaf=leafNum(T->lchild);

Rleaf=leafNum(T->rchild);

return(Lleaf+Rleaf);

}

}

void main(){

BiTree T;

T = CreateBiTree();//建立

printf("先序遍历:\n");

PreOrderTraverse(T);//输出

printf("\n");

printf("中序遍历:\n");

InOrderTraverse(T);//输出

printf("\n");

printf("后序遍历:\n");

PostOrderTraverse(T);//输出

printf("\n");

printf("该树结点数为:\n%d\n",numofnode(T));

printf("树的深度为:\n%d\n",depth(T));

printf("该树叶子结点数为:\n%d\n",leafNum(T)); }

演示图例:

#代表孩子为空

相关文档
最新文档