#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;
}
二叉树模板
最新推荐文章于 2023-12-20 21:58:59 发布