#include <stdio.h>
#include <stdlib.h>
typedef struct BiNode{
char data;
struct BiNode *lchild;
struct BiNode *rchild;
}BiNode;
typedef BiNode *BiTree;
//创建二叉树
void CreateBiTree(BiTree &T)
{
char ch;
scanf("%c",&ch);
if(ch == '#')
{
T = NULL;
}
else
{
T = (BiTree)malloc(sizeof(BiNode));
T -> data = ch;
CreateBiTree(T -> lchild);
CreateBiTree(T -> rchild);
}
}
//以下是用递归的方法写的
//先序遍历二叉树
void PreOrderTraverse(BiTree T)
{
if(T == NULL)
{
return;
}
else
{
printf("%c",T -> data);
PreOrderTraverse(T -> lchild);//先遍历左子树
PreOrderTraverse(T -> rchild);//右子树
}
}
//中序遍历
void InOrderTraverse(BiTree T)
{
if(T == NULL)
{
return;
}
else
{
InOrderTraverse(T -> lchild);
printf("%c",T -> data);
InOrderTraverse(T -> rchild);
}
}
void AfOrderTraverse(BiTree T)
{
if(T == NULL)
{
return;
}
else
{
AfOrderTraverse(T -> lchild);
AfOrderTraverse(T -> rchild);
printf("%c",T -> data);
}
}
//求二叉树结点的个数
int GetNode(BiTree T)
{
if(T == NULL)
{
return 0;
}
else
{
return (GetNode(T -> lchild) + GetNode(T -> rchild) + 1);
}
}
//深度
int GetHeight(BiTree T)
{
if(T == NULL)
{
return 0;
}
else
{
int height1 = GetHeight(T -> lchild);
int height2 = GetHeight(T -> rchild);
if(height1 > height2)
{
return height1 + 1;
}
else
{
return height2 + 1;
}
}
}
//叶子结点
int LeafCount(BiTree T)
{
if(T -> lchild == NULL && T -> rchild == NULL)
{
return 1;
}
else
{
return (LeafCount(T -> lchild) + LeafCount(T -> rchild));
}
}
int main()
{
BiTree T;
CreateBiTree(T);
printf("前序遍历:");
PreOrderTraverse(T);
printf("\n");
printf("中序遍历:");
InOrderTraverse(T);
printf("\n");
printf("后序遍历:");
AfOrderTraverse(T);
printf("\n");
printf("该二叉树的结点个数:%d\n",GetNode(T));
printf("该二叉树的深度:%d\n",GetHeight(T));
printf("该二叉树的叶子叶子结点:%d\n",LeafCount(T));
}
二叉树的基本操作
最新推荐文章于 2021-11-07 18:38:45 发布