【题目描述】
由于先序、中序和后序序列中的任一个都不能唯一确定一棵二叉树,所以对二叉树做如下处理,将二叉树的空结点用·补齐,如图所示。我们把这样处理后的二叉树称为原二叉树的扩展二叉树,扩展二叉树的先序和后序序列能唯一确定其二叉树。
现给出扩展二叉树的先序序列,要求输出其中序和后序序列。
【输入】
扩展二叉树的先序序列。
【输出】
输出其中序和后序序列。
【输入样例】
ABD..EF..G..C..
【输出样例】
DBFEGAC
DFGEBC
#include<bits/stdc++.h>
#include<stdlib.h>
#include<cstdio>
using namespace std;
typedef struct node;//struct node 是一个自定义类型,这里可以理解成int typedef是用来声明一种新的类型
typedef node *tree;//就是声明了一种类型tree ,而tree 实际上就是node*
struct node
{
char data;
tree L,R;
};
tree bt;
string s;
int i;
void build(tree &bt)//注意这里的引用
{
if(s[++i]!='.'){
bt=new node;
bt->data=s[i];
build(bt->L);
build(bt->R);
}
else bt=NULL;
}
void prints(tree bt)
{
if(bt){
prints(bt->L);
cout<<bt->data;
prints(bt->R);
}
}
void printx(tree bt)
{
if(bt){
printx(bt->L);
printx(bt->R);
cout<<bt->data;
}
}
int main()
{
cin>>s;
i=-1;
build(bt);
prints(bt);
cout<<endl;
printx(bt);
cout<<endl;
return 0;
}