#include<stdio.h>
#include<stdlib.h>
#define MaxLength 100
typedef struct BiTNode//二叉树结构
{
char data;//结点的值
struct BiTNode *lchild,*rchild;//左子树 ,右子树
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T)
{
char ch;
ch=getchar();
if(ch!='#')
{
if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))
{
printf("ERROR");
exit(0);
}
// T=(struct BiTNode*)malloc(sizeof(struct BiTNode));
T->data=ch;
CreateBiTree(T->lchild );
CreateBiTree(T->rchild );
}
else T=NULL;
//return *T;
}
void Preorder(BiTree T)
{
if(T)
{
printf("%c",T->data );
Preorder(T->lchild );
Preorder(T->rchild );
}
}
void LevelOrderTraverse(BiTree T)
{
BiTree Q[MaxLength];
int front=0,rear=0;
BiTree p;
if(T)
{
Q[rear]=T;//根结点入队
rear=(rear+1)%MaxLength;
}
while(front!=rear)
{
p=Q[front]; //队头元素出队
front=(front+1)%MaxLength;
printf("%c ",p->data );
if(p->lchild )//左孩子不为空,入队
{
Q[rear]=p->lchild;
rear=(rear+1)%MaxLength;
}
if(p->rchild )//右孩子不为空,入队
{
Q[rear]=p->rchild ;
rear=(rear+1)%MaxLength;
}
}
}
void main()
{
BiTree T;
printf("请输入先序遍历的二叉树序列(#号代表该结点为空):如(ABC##DE#G##F###)\n");
CreateBiTree(T);
Preorder(T);
printf("\n");
LevelOrderTraverse(T);
printf("\n");
}