您的位置:首页 > 其它

二叉树模板

2016-08-26 09:31 429 查看
#include <stdio.h>
#include <stdlib.h>
#define ElemType char

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

typedef struct BiTNode
{

char data;

struct BiTNode *lchild,*rchild;

} BiTNode,*BiTree;

//先序建立二叉树

char a[100];
int i;

BiTree CreatBiTree()
{
char ch;
BiTNode *T;
if(a[i++]==',')
T=NULL;
else
{
T = (BiTree)malloc(sizeof(BiTNode));
T->data = a[i-1];
T->lchild = CreatBiTree();
T->rchild = CreatBiTree();
}
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);

}

}

//层序遍历
void Cengxu(BiTree T)
{
if (T==NULL)
return ;
else
{
BiTree q[10000];
int s = 0,e = 0;
q[e++] = T;
while (s!=e)
{
BiTree p = q[s++];
printf ("%c",p->data);
if (p->lchild != NULL)
q[e++] = p->lchild;
if (p->rchild != NULL)
q[e++] = p->rchild;
}
}
}

//求叶子节点个数

int Leave (struct BiTNode *T)
{

if (T==NULL)
return 0;

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

else
return Leave(T->lchild)+Leave(T->rchild);
}

//计算二叉树的深度

int Depth(BiTree T)
{

int d=0,depthl,depthr;

if (T==NULL)
return 0;

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

depthl = Depth(T->lchild);
depthr = Depth(T->rchild);

if (depthl > depthr)
d = depthl;
else d = depthr;

return d+1;
}
int  main()
{

while (~scanf ("%s",a))
{
i=0;
int k,d;
BiTree T;

T = CreatBiTree();//建立

PreOrderTraverse(T);
printf ("\n");

InOrderTraverse(T);
printf ("\n");

PostOrderTraverse(T);
printf ("\n");

Cengxu(T);
printf ("\n");

k = Leave(T);
printf("%d\n",k);

d = Depth(T);
printf ("%d\n",d);

getchar();
}
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: