#include<iostream>
#include<stack>
#include<queue>
using namespace std;
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreatTree(BiTree &T);//建立二叉树
void PreOrderTraverse(BiTree &T); //前序遍历
void InOrderTraverse(BiTree &T);//中序遍历
void PostOrderTraverse(BiTree &T); //后序遍历
int height(BiTree &T);//二叉树高度
int numberOfNodes(BiTree &T);//二叉树结点总数
void getLeavesConut (BiTree T,int *count);//叶子节点数
int getBiTreeLeavesCount(BiTree T);
int numberOfFulls(BiTree &T);//计算满节点个数
int main()
{
BiTree tree;
CreatTree(tree);//建立二叉树
cout<<"前序遍历为:";
PreOrderTraverse(tree);//前序遍历
cout<<endl;
cout<<"中序遍历为:";
InOrderTraverse(tree); //中序遍历
cout<<endl;
cout<<"后序遍历为:";
PostOrderTraverse(tree); //后序遍历
cout<<endl;
cout<<"二叉树高度为:";
cout<<height(tree)<<endl;
cout<<"二叉树的节点总数为:"<<numberOfNodes(tree)<<endl;
cout<<"叶子结点个数为:"<<getBiTreeLeavesCount(tree)<<endl;
cout<<endl;
cout<<"满节点个数为:"<<numberOfFulls(tree)<<",";
if(numberOfFulls(tree)==numberOfNodes(tree)-getBiTreeLeavesCount(tree))
cout<<"该二叉树为满二叉树"<<endl;
else cout<<"该二叉树不是满二叉树"<<endl;
return 0;
}
void CreatTree(BiTree &T)//建立二叉树
{
char ch;
cin>>ch;
if(ch=='#')T=NULL;
else
{
T=new BiTNode;
if(!T)cout<<"生成节点错误!"<<endl;
T->data=ch;
CreatTree(T->lchild);
CreatTree(T->rchild);
}
}
void PreOrderTraverse(BiTree &T) //前序遍历
{
if(T)
{
cout<<T->data;
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree &T)//中序遍历
{
if(T)
{
InOrderTraverse(T->lchild);
cout<<T->data;
InOrderTraverse(T->rchild);
}
}