输出利用先序遍历创建的二叉树的层次遍历序列
利用先序递归遍历算法创建二叉树并输出该二叉树的层次遍历序列。先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建该二叉树的二叉链表存储结构。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符"#“时表示该结点不需要创建,否则创建该结点。最后再输出创建完成的二叉树的层次遍历序列。需要注意输入数据序列中的”#“字符和非”#"字符的序列及个数关系,这会最终决定创建的二叉树的形态。
输入
输入为接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树)。
输出
每个用例用一行出该用例对应的二叉树的层次遍历序列。
样例输入
A##
ABC####
AB##C##
ABCD###EF##G##H##
A##B##
样例输出
A
ABC
ABC
ABHCEDFG
A
AC代码
#include
using namespace std;
#define Maxsize 100
typedef struct node
{
char data;
struct node *lc,*rc;
}BTNode;
typedef struct
{
BTNode *da[Maxsize];
int front ,rear;
}SqQueue;//其实可以用循环队列节省空间(但是我懒)
void Creat(BTNode *&t)//先序遍历创建二叉树
{
char a;
cin>>a;
if(a==’#’)
t=NULL;
else
{
t=new BTNode;
t->data=a;
t->lc=NULL;
t->rc=NULL;
Creat(t->lc);
Creat(t->rc);
}
}
void Trav(BTNode *p)
{
SqQueue *t;
t=new SqQueue;
t->front=-1;
t->rear=-1;
t->da[++t->rear]=p;//将根节点入队列保存
while(t->rear!=t->front)//当队列不为空时一直循环
{
cout<da[++t->front]->data;
p=t->da[t->front];
if(p->lc!=NULL)
t->da[++t->rear]=p->lc;//左孩子入队列
if(p->rc!=NULL)
t->da[++t->rear]=p->rc;//右孩子入队列
}
}
int main()
{
BTNode *s;
Creat(s);
Trav(s);
return 0;
}