#include <iostream>
#include <stdio.h>
using namespace std;
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree createBiTree(BiTree T)
{
char ch;
cin>>ch;
if(ch=='#')
return NULL;
else
{
T=new BiTNode;
T->data=ch;
T->lchild=createBiTree(T->lchild);
T->rchild=createBiTree(T->rchild);
}
return T;
}
/*
BiTree createBiTree()
{
BiTree T;
char ch;
cin>>ch;
if(ch=='#')
return NULL;
else
{
T=new BiTNode;
T->data=ch;
T->lchild=createBiTree();
T->rchild=createBiTree();
}
return T;
}*/
//中序周遊
void inTraverse(BiTree T)
{
if(T)
{
inTraverse(T->lchild);
cout<<T->data<<" ";
inTraverse(T->rchild);
}
}
//先序周遊
void preTraverse(BiTree T)
{
if(T)
{
cout<<T->data<<" ";
preTraverse(T->lchild);
preTraverse(T->rchild);
}
}
//後序周遊
void postTraverse(BiTree T)
{
if(T)
{
postTraverse(T->lchild);
postTraverse(T->rchild);
cout<<T->data<<" ";
}
}
//層次周遊
void levelTraverse(BiTree T)
{
BiTree p[];
int f=,r=;
if(T)
{
p[r++]=T;
while(f!=r)
{
cout<<p[f]->data<<" ";
if(p[f]->lchild)
p[r++]=p[f]->lchild;
if(p[f]->rchild)
p[r++]=p[f]->rchild;
f++;
}
}
}
//求結點數目
int getNodes(BiTree T)
{
if(!T)
return ;
return getNodes(T->lchild)+getNodes(T->rchild)+;
}
//求葉子結點數
int getleave(BiTree T)
{
if(!T)
return ;
if(!T->lchild&&!T->rchild)
return ;
return getleave(T->lchild)+getleave(T->rchild);
}
//求樹的深度
int depth(BiTree T)
{
int ld,rd;
if(!T)
return ;
ld=depth(T->lchild);
rd=depth(T->rchild);
return ld>rd?ld+:rd+;
}
int main()
{
BiTree T;
T=createBiTree(T);//T=createBiTree();函數功能不需要參數時,形參就可以省寫
cout<<"先序周遊序列為"<<endl;
preTraverse(T);
cout<<endl;
cout<<"中序周遊序列為"<<endl;
inTraverse(T);
cout<<endl;
cout<<"後序周遊序列為"<<endl;
postTraverse(T);
cout<<endl;
cout<<"層次周遊序列為"<<endl;
levelTraverse(T);
cout<<endl;
cout<<"結點總數為"<<getNodes(T)<<endl;
cout<<"葉子結點總數為"<<getleave(T)<<endl;
cout<<"樹的深度為"<<depth(T)<<endl;
return ;
}