练习赛13.4.求后序遍历

来源:互联网 发布:淘宝色差问题怎么回复 编辑:程序博客网 时间:2024/06/18 04:28

求后序遍历

Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 4 Accepted Submission(s) : 3

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

Problem Description

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

Input

输入有多组数据,对于输入每组数据有两行,第一行一个字符串(字符串长度不超过30),表示树的先序遍历,第二行一个字符串,表示树的中序遍历。树的结点一律用小写字母表示。

Output

对于每组输入输出仅一行,表示树的后序遍历序列。

Sample Input

abdecdbeac

Sample Output

debca
思路分析:涉及到二叉树的知识,先序的排列方式是先排根节点然后拍左节点然后拍右节点,中序是先排左节点然后拍根节点最后排右节点,后序为排左节点然后拍右节点然后排根节点;
代码#include<iostream>#include <stdio.h>#include <string>using namespace std;int i;int chazhao(string s1,char c)//在中序中查找{    for(i=0;i<s1.length();i++)        if(c==s1[i])        return i;    return -1;}bool bianli(string &str,string &mid){    if(str.length()==0)//如果先序没有       return false;    if(str.length()==1)//如果先序为1就返回    {        cout<<str;        return true;    }    int k=chazhao(mid,str[0]);//找到根节点    string newstr=str.substr(1,k);//从先序的左边开始查找    string newmid=mid.substr(0,k);//从中序的左边开始查找    bianli(newstr,newmid);//找到新的根节点    newstr=str.substr(k+1,str.length()-k-1);//重复上面的从右边开始。    newmid=mid.substr(k+1,mid.length()-k-1);    bianli(newstr,newmid);    cout<<str[0];}int main(){    string str,mid;    while(cin>>str>>mid)    {        bianli(str,mid);        cout<<endl;    }    return 0;}:
原创粉丝点击