先序构建二叉树并层序遍历输出
【问题描述】
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树。例如如下的先序遍历字符串:ABC##DE#G##F### ,其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行层序遍历,输出遍历结果。
【输入形式】
输入包括1行字符串,长度不超过100。
【输出形式】
可能有多组测试数据,对于每组数据,每个字符后面都有一个空格,每个输出结果占一行。
【样例输入】
abc##de#g##f###
【样例输出】
a b c d e f g
【样例说明】
【评分标准】
c++语言 参考大佬代码后总结出的 可运行
#include<stdio.h>
#include<string.h>
#include<iostream>
#define Maxsize 100
using namespace std;
typedef struct tree
{
char data;
struct tree* lchild, * rchild;
}TreeE;
void Creat(TreeE*& T)
{
char c;
cin>>c;
if (c == '#') T = NULL;
else
{
T = (TreeE*)malloc(sizeof(TreeE));
T->data = c;
Creat(T->lchild);
Creat(T->rchild);
}
}
void Getnode(TreeE* T)
{
TreeE* p;
TreeE* qu[Maxsize];
int front, rear;
front = rear = -1;
rear++;
qu[rear] = T;
while (front != rear)
{
front = (front + 1) % Maxsize;//front==0;
p = qu[front];
cout<< p->data<<" ";
if (p->lchild != NULL)
{
rear = (rear + 1) % Maxsize;
qu[rear] = p->lchild;
}
if (p->rchild != NULL)
{
rear = (rear + 1) % Maxsize;
qu[rear] = p->rchild;
}
}
}
int main()
{
TreeE* T;
Creat(T);
Getnode(T);
return 0;
}