/*
本程序采用的是递归调用算法,操作简单,理解较难
采用的是c++的书写风格,但并不是c++类的思想,使用的认为C语言的编程思想
*/
#include<iostream>
using namespace std;
typedef char elementType;
typedef struct BLNode
{
elementType data;
struct BLNode *lchild;
struct BLNode *rchild;
}BiNode,*BiTree;
void creat(BiTree &T)//创建
{
char ch;
cin>>ch;
if(ch=='/')
T=NULL;
else
{
T=new BiNode;
T->data=ch;
creat(T->lchild);
creat(T->rchild);
}
}
void protrave(BiTree T)//先序
{
if(T)
{
cout<<T->data;
protrave(T->lchild);
protrave(T->rchild);
}
}
void midtrave(BiTree T)//中序
{
if(T)
{
midtrave(T->lchild);
cout<<T->data;
midtrave(T->rchild);
}
}
void lasttrave(BiTree T)//后序
{
if(T)
{
lasttrave(T->lchild);
lasttrave(T->rchild);
cout<<T->data;
}
}
int H;//全局变量
int heigth(BiTree T)//树高
{
int Hl,Hr;
if(T==NULL)//或者写成 if(!T)
return 0;
else
{
Hl=heigth(T->lchild);
Hr=heigth(T->rchild);
H=Hl>Hr?Hl+1:Hr+1;
}
return H;
}
int n;
void countleaf(BiTree T)//叶子节点数
{
if(T)
{
if(!T->lchild&&!T->rchild)
n++;
countleaf(T->lchild);
countleaf(T->rchild);
}
}
int main(void)
{
BiTree T;
cout<<"创建一个二叉树:";
creat(T);
cout<<"**********遍历算法(递归)***********"<<endl;
cout<<"先序遍历:";
protrave(T);
cout<<endl;
cout<<"中序遍历:";
midtrave(T);
cout<<endl;
cout<<"后序遍历:";
lasttrave(T);
cout<<endl;
heigth(T);
cout<<"二叉树的高度:"<<H;
cout<<endl;
countleaf(T);
cout<<"二叉树的叶子节点数:"<<n;
cout<<endl;
return 0;
}
本程序采用的是递归调用算法,操作简单,理解较难
采用的是c++的书写风格,但并不是c++类的思想,使用的认为C语言的编程思想
*/
#include<iostream>
using namespace std;
typedef char elementType;
typedef struct BLNode
{
elementType data;
struct BLNode *lchild;
struct BLNode *rchild;
}BiNode,*BiTree;
void creat(BiTree &T)//创建
{
char ch;
cin>>ch;
if(ch=='/')
T=NULL;
else
{
T=new BiNode;
T->data=ch;
creat(T->lchild);
creat(T->rchild);
}
}
void protrave(BiTree T)//先序
{
if(T)
{
cout<<T->data;
protrave(T->lchild);
protrave(T->rchild);
}
}
void midtrave(BiTree T)//中序
{
if(T)
{
midtrave(T->lchild);
cout<<T->data;
midtrave(T->rchild);
}
}
void lasttrave(BiTree T)//后序
{
if(T)
{
lasttrave(T->lchild);
lasttrave(T->rchild);
cout<<T->data;
}
}
int H;//全局变量
int heigth(BiTree T)//树高
{
int Hl,Hr;
if(T==NULL)//或者写成 if(!T)
return 0;
else
{
Hl=heigth(T->lchild);
Hr=heigth(T->rchild);
H=Hl>Hr?Hl+1:Hr+1;
}
return H;
}
int n;
void countleaf(BiTree T)//叶子节点数
{
if(T)
{
if(!T->lchild&&!T->rchild)
n++;
countleaf(T->lchild);
countleaf(T->rchild);
}
}
int main(void)
{
BiTree T;
cout<<"创建一个二叉树:";
creat(T);
cout<<"**********遍历算法(递归)***********"<<endl;
cout<<"先序遍历:";
protrave(T);
cout<<endl;
cout<<"中序遍历:";
midtrave(T);
cout<<endl;
cout<<"后序遍历:";
lasttrave(T);
cout<<endl;
heigth(T);
cout<<"二叉树的高度:"<<H;
cout<<endl;
countleaf(T);
cout<<"二叉树的叶子节点数:"<<n;
cout<<endl;
return 0;
}