7-2 层次遍历
给定二叉树的包含虚结点的先序遍历序列信息,按层次顺序给出遍历的结果。
输入格式:
首先输入一个整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据在一行中输入一个字符串(不含空格且长度不超过80),表示二叉树的先序遍历序列(其中@表示虚结点)。
输出格式:
对于每组测试,输出层次遍历的结果。
输入样例:
1
ABD@@EG@@@C@F@@
输出样例:
ABCDEFG
注:本代码的队列使用的是c++现成的queue头,如要求使用c语言,请自行实现
#include<stdio.h>
#include<malloc.h>
#include<queue>
#include<iostream>
using namespace std;
typedef struct node {
char data;
struct node* lchild;
struct node* rchild;
}Bitree;
Bitree* CreatBitree(Bitree* tree) {
char ch;
char a;
cin >> ch;
if (ch == '@') {
tree = NULL;
}
else {
tree = (Bitree*)malloc(sizeof(Bitree));
tree->data = ch;
tree->lchild = CreatBitree(tree->lchild);
tree->rchild = CreatBitree(tree->rchild);
}
return tree;
}
void BitreeLevelOrder(Bitree* root)
{
queue<Bitree> Queue;
if (root == NULL)
{
return;
}
Queue.push(*root);
while (!Queue.empty())
{
Bitree temp = Queue.front();
Queue.pop();
printf("%c", temp.data);
if (temp.lchild != NULL) {
Queue.push(*temp.lchild);
}
if (temp.rchild != NULL) {
Queue.push(*temp.rchild);
}
}
}
int main() {
int num = 0;
cin >> num;
for (int i = 0; i < num; i++) {
queue<char> s;
Bitree* tree = NULL;
tree = CreatBitree(tree);
BitreeLevelOrder(tree);
printf("\n");
}
}