这个题目用来练习数据结构很不错,给出树的先序遍历,中序遍历,然后求出后序遍历。
思路很简单:根据先序,中序,建树。然后后序访问此树。
使用递归。
#include<algorithm>
#include<iostream>
#include<stdio.h>
using namespace std;
typedef struct Node
{
char t;
struct Node *lch,*rch;
};
//建树
Node* create(const string& pres,const string& ins)
{
Node* root;
if(pres.length()>0)
{
root=new Node;
root->t=pres[0];
int index=ins.find(root->t);
root->lch=create(pres.substr(1,index),ins.substr(0,index));
root->rch=create(pres.substr(index+1),ins.substr(index+1));
}
else root=NULL;
return root;
}
//后序访问
void output(Node *root)
{
if(root->lch)
output(root->lch);
if(root->rch)
output(root->rch);
printf("%c",root->t);
}
int main()
{
char pre[502],inord[502];
while(scanf("%s%s",pre,inord)==2)
{
Node *r;
r=new Node;
r=create(pre,inord);
output(r);
printf("/n");
}
return 0;
}