链表二叉树链接如下
sdut oj 数据结构实验之二叉树五:层序遍历 (数组模拟).
数组模拟方式见下文
Description
已知一个按先序输入的字符序列,如abd,eg,cf,(其中,表示空结点)。请建立二叉树并求二叉树的层次遍历序列。
Input
输入数据有多行,第一行是一个整数t (t<1000),代表有t行测试数据。每行是一个长度小于50个字符的字符串。
Output
输出二叉树的层次遍历序列。
Sample
Input
2
abd,,eg,,,cf,,,
xnl,,i,,u,,
Output
abcdefg
xnuli
C++
/*
time : 2021年6月23日23:30:14
result : accept
author : kirie
tips : null
*/
#include <iostream>
#include <cstring>
#include <queue>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
const int N=105;
char str[N];
int t,cnt;
typedef struct TreeNode{
char val;
struct TreeNode* LChild;
struct TreeNode* RChild;
}Node;
Node* CreateTree(){
char temp;
temp = str[cnt++];
if(temp == ',')
return NULL;
else {
Node* root = new Node;
root->val = temp;
root->LChild = CreateTree();
root->RChild = CreateTree();
return root;
}
}
void lev_show(Node* root){
queue<Node*>que;
Node* t;
if(!root)
return ;
que.push(root);
while(!que.empty()){
t = que.front();
que.pop();
cout<<t->val;
if(t->LChild)
que.push(t->LChild);
if(t->RChild)
que.push(t->RChild);
}
}
int main()
{
cin>>t;
while(t--){
getchar();
mem(str,0);
scanf("%s",str);
cnt = 0;
Node* root = new Node;
root = CreateTree();
lev_show(root);
cout<<endl;
}
return 0;
}
graphic