二叉树的基本操作(先序创建二叉树)
#include <stdio.h>
#include<stdlib.h>
//结构体
typedef struct node
{
char data;
struct node *lchild;
struct node *rchild;
}BiTNNode,BiTree;
//先序构造二叉树
BiTNNode *creatBiTree()
{
char k;
scanf("%c",&k);
if(k=='#')
return NULL;
BiTNNode *T=(BiTNNode *)malloc(sizeof(BiTNNode));
T->data=k;
T->lchild=creatBiTree();
T->rchild=creatBiTree();
return T;
}
//先序遍历
void PreOrder(BiTNNode *T)
{
if(T)
{
printf("%2c",T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
//中序遍历
void InOrder(BiTNNode *T)
{
if(T)
{
InOrder(T->lchild);
printf("%2c",T->data);
InOrder(T->rchild);
}
}
//后序遍历
void PostOrder(BiTNNode *T)
{
if(T)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%2c",T->data);
}
}
//统计叶子结点的个数
int Leaf(BiTNNode *T)
{
int LeafCount;
if(T==NULL)
LeafCount=0;
else if(T->lchild==NULL&&T->rchild==NULL)
LeafCount=1;
else
LeafCount=Leaf(T->lchild)+Leaf(T->rchild);
return LeafCount;
}
//计算二叉树的深度
int TreeDepth(BiTNNode *T)
{
if(T==NULL)
return 0;
else if(T->lchild==NULL&&T->rchild==NULL)
return 1;
else
{
int depthleft=TreeDepth(T->lchild)+1;
int depthright=TreeDepth(T->rchild)+1;
return depthleft>depthright?depthleft:depthright;
}
}
//主函数
int main(){
printf("先序构造一棵二叉树(左/右孩子为空用'#'表示):");
BiTNNode *T=creatBiTree();
printf("此二叉树的先序遍历序列是:");
PreOrder(T);
printf("\n");
printf("此二叉树的中序遍历序列是:");
InOrder(T);
printf("\n");
printf("此二叉树的后序遍历序列是:");
PostOrder(T);
printf("\n");
printf("这棵树叶子结点有%d个\n",Leaf(T));
printf("这棵树的深度为:%d\n",TreeDepth(T));
return 0;
}
运行结果截图:
上述运行结果二叉树为: