數據結構實驗之二叉樹五:層序遍歷
Time Limit: 1000MS Memory limit: 65536K
題目描述
已知一個按先序輸入的字符序列,如abd,,eg,,,cf,,,(其中,表示空結點)。請建立二叉樹並求二叉樹的層次遍歷序列。
輸入
輸出
示例輸入
2 abd,,eg,,,cf,,, xnl,,i,,u,,
示例輸出
abcdefg xnuli
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
typedef struct node
{
char data;
struct node *rchild,*lchild;
}node,*tree;
char c[1000];
int i;
int xiancreat(tree &t);
void levelorder(tree t);
int main()
{
int a;
tree t;
cin>>a;
while(a--)
{
i=0;
cin>>c;
xiancreat(t);
levelorder(t);
cout<<endl;
}
}
int xiancreat(tree &t)
{
char a;
a=c[i++];
if(a==',')
t=NULL;
else
{
t=(tree)malloc(sizeof(node));
if(!t) exit(0);
t->data=a;
xiancreat(t->lchild);
xiancreat(t->rchild);
}
return 0;
}
void levelorder(tree t)
{
tree p=t;
//if(t!=NULL)
queue<tree>sq;
if(p)//注意,如果沒有會超時
sq.push(p);
while(!sq.empty())
{
p=sq.front();
cout<<p->data;
sq.pop();
if(p->lchild!=NULL)
sq.push(p->lchild);
if(p->rchild!=NULL)
sq.push(p->rchild);
}
}