题目描述
层次遍历二叉树,是从根结点开始遍历,按层次次序“自上而下,从左至右”访问树中的各结点。
建树方法采用“先序遍历+空树用0表示”的方法
要求:采用队列对象实现,函数框架如下:
输入
第一行输入一个整数t,表示有t个测试数据
第二行起输入二叉树先序遍历的结果,空树用字符‘0’表示,输入t行
输出
逐行输出每个二叉树的层次遍历结果
样例输入
2
AB0C00D00
ABCD00E000FG00H0I00
样例输出
ABDC
ABFCGHDEI
代码
#include <bits/stdc++.h>
using namespace std;
string s;
int t;
struct NODE{
char data;
NODE *l,*r;
NODE(){
l=NULL;
r=NULL;
}
};
int id=0;
void build(NODE *&node){
if(id<s.length()){
if(s[id]=='0'){
node=NULL;
id++;
return;
}
node=new NODE;
node->data=s[id];
id++;
build(node->l);
build(node->r);
}
}
queue<NODE*> q;
void display(NODE *node){
//
q.push(node);
while(!q.empty()){
NODE *now=q.front();
q.pop();
cout<<now->data;
if(now->l) q.push(now->l);
if(now->r) q.push(now->r);
}
cout<<endl;
}
int main(){
cin>>t;
while(t--){
while(!q.empty()){
q.pop();
}
id=0;
s.clear();
cin>>s;
NODE *head=new NODE;
build(head);
display(head);
}
return 0;
}