http://ybt.ssoier.cn:8088/problem_show.php?pid=1340
【题目描述】
由于先序、中序和后序序列中的任一个都不能唯一确定一棵二叉树,所以对二叉树做如下处理,将二叉树的空结点用·补齐,如图所示。我们把这样处理后的二叉树称为原二叉树的扩展二叉树,扩展二叉树的先序和后序序列能唯一确定其二叉树。
现给出扩展二叉树的先序序列,要求输出其中序和后序序列。
【输入】
扩展二叉树的先序序列。
【输出】
输出其中序和后序序列。
【输入样例】
ABD..EF..G..C..
【输出样例】
DBFEGAC
DFGEBCA
方法:先建树,再输出中序序列和后序序列
#include<bits/stdc++.h>
using namespace std;
typedef struct node;
typedef node *tree;
struct node{
char data;
tree lchild, rchild;
};
tree bt;
int i;
string s;
void build(tree &bt){//建树
if(s[++i] != '.'){
bt = new node;
bt->data = s[i];
build(bt->lchild);
build(bt->rchild);
}
else
bt = NULL;
}
void printzx(tree bt){//输出中序序列
if(bt){
printzx(bt->lchild);
cout << bt->data;
printzx(bt->rchild);
}
}
void printhx(tree bt){//输出后序序列
if(bt){
printhx(bt->lchild);
printhx(bt->rchild);
cout << bt->data;
}
}
int main(){
cin >> s;
i = -1;
build(bt);//建树
printzx(bt);//中序
cout << endl;
printhx(bt);//后序
cout << endl;
return 0;
}