问题如图
#include<stdio.h>
#include<stdlib.h>
#include<queue>
using namespace std;
typedef struct BiTNode
{
char Data;
struct BiTNode *SiBling,*FirstChild;
}BiTNode,*BiTree;
void inittree (BiTree &T)
{
T=(BiTNode*)malloc(sizeof(BiTNode));
T->FirstChild=T->SiBling=NULL;
}
void Create(BiTree &T,int n)
{
queue<BiTree>Q;
char F,C;
BiTree p;
BiTree s;
BiTree r;
for(int i=0;i<n;i++)
{
T=NULL;
scanf("%c",&F);
getchar();
scanf("%c",&C);
getchar();
p=(BiTNode*)malloc(sizeof(BiTNode));
p->Data=C;
p->FirstChild=p->SiBling=NULL;
Q.push(p);
if(F=='#')T=p;
else
{
s=Q.front();
while(s->Data!=F)
{
Q.pop();
s=Q.front();
}
if(!(s->FirstChild))
{
s->FirstChild=p;r=p;
}
else
{
r->SiBling=p;r=p;
}
}
}
}
void PreOrder(BiTree Pre)
{
if(Pre=NULL)return;
printf(" %d",Pre->Data);
PreOrder(Pre->FirstChild);
PreOrder(Pre->SiBling);
}
void PostOrder(BiTree Post)
{
if(Post=NULL)return;
PostOrder(Post->FirstChild);
printf(" %d",Post->Data);
PostOrder(Post->SiBling);
}
int max(int a,int b)
{
if(a>b)return a;
else return b;
}
int h1,h2;
int TreeDepth(BiTree T) {
if(!T) return 0;
else {
h1 = TreeDepth( T->FirstChild );
h2 = TreeDepth( T->SiBling);
return (max(h1+1,h2));
}
}
//int Leaf(BiTree T)
//{
// if(T==NULL)return 0;
// if(T->SiBling==NULL)return 1;
// return Leaf(T->SiBling);
//}
int main()
{
int n;
BiTree T;
inittree(T);
scanf("%d",&n);
getchar();
Create(T,n);
printf("PreOrder:");
PreOrder(T);
printf("\n");
printf("PostOrder:");
PostOrder(T);
printf("\n");
printf("Depth:%d\n",TreeDepth(T));
// printf("Number of leaves:%d\n",Leaf(T));
return 0;
}
输入
7
’# ‘(没有单引号)A
A B
A C
A D
C E
C F
E G
输出
PreOrder: A B C E G F D
PostOrder: B G E F C D A
Depth:4
Number of leaves:4