UVA 536 Tree Recovery

来源:互联网 发布:软件模块接口参数 编辑:程序博客网 时间:2024/06/12 11:38

这里写图片描述
这里写图片描述

题意:
给出一个二叉树的前序遍历和中序遍历,输出其后序遍历
思路:
利用递归,将前序数组和中序数组不断划分,不断将前序数组的第一个值存入后序数组

#include <iostream>#include <string>using namespace std;string per,in,pos;void initial(){    pos.clear();//清空字符串}void compute(string perord,string inord){    int length,i;    length=perord.size();    if(length>0)//递归条件判断一般不用“=”    {        i=int(inord.find(perord[0]));//find()返回值为迭代器,用int()转化为下标,返回前序数组的首位在中序数组中的位置,即根的位置,进而分为左子树和右子树        compute(perord.substr(1,i),inord.substr(0,i));//substr()复制字符串,第一个参数为下标,第二个参数为复制的个数,左子树        compute(perord.substr(i+1,length-i-1), inord.substr(i+1,length-i-1));//右子树        pos.push_back(perord[0]);//存入pos中    }}int main(){    while(cin>>per>>in)    {        initial();        compute(per,in);        cout<<pos<<endl;    }    return 0;}