题目:二叉树扩展先序遍历转中序遍历
问题描述
编一个程序,读入用户输入的一串扩展先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的扩展先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。
输入格式
输入包括1行字符串,长度不超过100。
输出格式
输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。每个输出结果占一行。
样例输入
abc##de#g##f###
样例输出
c b e g d f a
样例说明
根据给定的扩展先序遍历序列,建立对应的二叉树,然后对所得的二叉树进行中序遍历输出结果即可。
思路
根据书里面的先序遍历算法,将遍历函数改为创建函数从而达到以先序序列建立二叉树
之后中序遍历二叉树即可
#include <bits/stdc++.h>
//C/C++万能头,不能编译请自行替换
using namespace std;
//树结构体
typedef struct BiNode{
char data;
struct BiNode *lchild,*rchild;
}BiNode,*Bitree;
//先序建立二叉树
void Setupbirtree(Bitree &T){
char ch;
cin>>ch;
if(ch=='#') T=NULL;
else {
T=new BiNode;
T->data=ch;
Setupbirtree(T->lchild);
Setupbirtree(T->rchild);
}
}
//中序遍历
void InorderTraverse(Bitree &T){
if(T==NULL) return;
else{
InorderTraverse(T->lchild);
cout<<T->data<<" ";
InorderTraverse(T->rchild);
}
}
int main() {
Bitree T;
Setupbirtree(T);
InorderTraverse(T);
return 0;
}