//定义头部
#include <iostream>
using namespace std;
struct BiTNode{
char data;
struct BiTNode *lchild, *rchild;//左右孩子
};
BiTNode *T;
void CreateBiTree(BiTNode* &T);
void Inorder(BiTNode* &T);
void PreOrderTraverse(BiTNode* &T);
void Posorder(BiTNode* &T);
int NodeCount(BiTNode* T);
int Depth(BiTNode* &T);
//先序递归创建二叉树树
void CreateBiTree(BiTNode* &T)
{
//按先序输入二叉树中结点的值(一个字符),空格字符代表空树,
//构造二叉树表表示二叉树T。
char ch;
cin>>ch;
if(ch=='*')
T=NULL;
else
{
T=new BiTNode;//产生新的子树
T->data=ch;//由getchar()逐个读入来
CreateBiTree(T->lchild);//递归创建左子树
CreateBiTree(T->rchild);//递归创建右子树
}
}//CreateTree
//先序递归遍历二叉树
void PreOrderTraverse(BiTNode* &T)
{
//先序递归遍历二叉树
if(T)
{//当结点不为空的时候执行
cout<<T->data;
PreOrderTraverse(T->lchild);//
PreOrderTraverse(T->rchild);
}
else
cout<<" ";
}//PreOrderTraverse
//中序遍历二叉树
void Inorder(BiTNode* &T)
{//中序递归遍历二叉树
if(T)
{//bt=null退层
Inorder(T->lchild);//中序遍历左子树
cout<<T->data;//访问参数
Inorder(T->rchild);//中序遍历右子树
}
else
cout<<" ";
}//Inorder
//后序递归遍历二叉树
void Posorder(BiTNode* &T)
{
if(T)
{
Posorder(T->lchild);//后序递归遍历左子树
Posorder(T->rchild);//后序递归遍历右子树
cout<<T->data;//访问根结点
}
else
cout<<"";
}
//统计二叉树中结点的个数
int NodeCount(BiTNode* T)
{//统计二叉树T中结点的个数
if(T==NULL)
return 0;//如果是空树,则结点个数为零,递归结束
else
return NodeCount(T->lchild)+NodeCount(T->rchild)+1;
//否则结点个数为左子树的结点个数+右子树的结点个数+1
}
int Depth(BiTNode* &T)
{
if(T==NULL)
{
return 0;
}
else
{
int m=Depth(T->lchild);
int n=Depth(T->rchild);
if(m>n)
return (m+1);
else
return (n+1);
}
}
//主函数
int main()
{
cout<<"创建一颗树,其中A->Z字符代表树的数据,用“*”表示空树:"<<endl;
CreateBiTree(T);
cout<<"先序递归遍历:"<<endl;
PreOrderTraverse(T);
cout<<endl;
cout<<"中序递归遍历:"<<endl;
Inorder(T);
cout<<endl;
cout<<"后序递归遍历:"<<endl;
Posorder(T);
cout<<endl;
cout<<"二叉树的结点个数:";
cout<<NodeCount(T)<<endl;
cout<<"二叉树的深度为:";
cout<<Depth(T)<<endl;
return 0;
}
简单二叉树
最新推荐文章于 2022-04-05 20:58:20 发布