C++数据结构已知二叉树的前序遍历与中序遍历结果求后序遍历

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C++数据结构已知二叉树的前序遍历与中序遍历结果求后序遍

二叉树的遍历问题
描述
输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。

输入
输入文件为tree.in,共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。

树的结点一律用小写字母表示。

输出
输出文件为tree.out,仅一行,表示树的后序遍历序列。

样例输入
abdec
dbeac
样例输出
debca
--------------------------------------------------------------------- --------------------------------------------------------------------- #include
using namespace std;
struct tree{
char data;
tree *l,*r;
};
tree * create(char pre[],char in[]){
tree *root;
if(strlen(pre)==0) {root=NULL;}
else{
root=new tree;
root->data=pre[0];
char pre1[20];pre1[0]='\0';
char pre2[20];pre2[0]='\0';
char in1[20];in1[0]='\0';
char in2[20];in2[0]='\0';
int n=1;
for(int i=0;i<strlen(in);i++){< p=""> if(in[i]!=pre[0]&&n==1){
in1[i]=in[i];
in1[i+1]='\0';
}
if(in[i]==pre[0]) n=2;
if(in[i]!=pre[0]&&n==2){
in2[i-strlen(in1)-1]=in[i];
in2[i-strlen(in1)+1]='\0';
}
}
for(int i=1;i<strlen(pre);i++){< p=""> if(i<strlen(in1)+1){< p="">
pre1[i-1]=pre[i];
pre1[i]='\0';
}
else {
pre2[i-1-strlen(pre1)]=pre[i];
pre2[i-strlen(pre1)]='\0';
}
}
root->l=create(pre1,in1);
root->r=create(pre2,in2);
}
return root;
}
void post(tree * root){
if(root==NULL) return; else {
post(root->l);
post(root->r);
cout<data;
}
}
int main(){
char pre[100];
char in[100];
cin>>pre;
cin>>in;
tree * root=create(pre,in); post(root);
return 0;
}
</strlen(in1)+1){<>
</strlen(pre);i++){<>
</strlen(in);i++){<>。

相关文档
最新文档