重建二叉树(1)

来源:互联网 发布:南华大学船山学院 知乎 编辑:程序博客网 时间:2024/06/01 09:32

                      重建二叉树:已知前序遍历和中序遍历,求其后序遍历。

Description

对于二叉树T,可以递归定义它的先序遍历、中序遍历和后序遍历如下: PreOrder(T)=T的根节点+PreOrder(T的左子树)+PreOrder(T的右子树) InOrder(T)=InOrder(T的左子树)+T的根节点+InOrder(T的右子树) PostOrder(T)=PostOrder(T的左子树)+PostOrder(T的右子树)+T的根节点 其中加号表示字符串连接运算。

Input

第一行为一个整数t(0<t<10),表示测试用例个数。 以下t行,每行输入一个测试用例,包含两个字符序列s1和s2,其中s1为一棵二叉树的先序遍历序列,s2为中序遍历序列。s1和s2之间用一个空格分隔。序列只包含大写字母,并且每个字母最多只会出现一次。 

Output

为每个测试用例单独一行输出后序遍历序列。 


样例输入:

2 DBACEGF ABCDEFG BCAD CBAD 
输出:
ACBFGED
CDABGED
分析:
先序遍历的第一个字符就是根,因此只需在中序遍历中找到它,就知道左右子树的先序和中序遍历了。例如:
先序:D BACEGF    中序:ABCD EFG
由先序遍历的第一个字符D 可知,此二叉树的根节点为D ,并且:
左子树的先序遍历为:BAC    中序遍历为:ABC
右子树的先序遍历为:EGF    中序遍历为:EFG
可用递归思想。
#include<iostream>#include<string.h> #include<cstring> using namespace std;void get(int n,char *s1,char *s2,char* res){     if(n<=0) return;     int p=strchr(s2,s1[0])-s2;           //由s1[0]可知道树的根节点,求出该根节点在s2中的位置,减去s2的值得到左子树的长度      get(p,s1+1,s2,res);                 //对左子树递归 ,p是长度,s1+1表示左子树开始的位置 ,s2不变因为只是在s2里找到s1+1[0]对应的位置      get(n-p-1,s1+p+1,s2+p+1,res+p);     //对右子树递归      res[n-1]=s1[0];                    //每次将s1[0]添加到结果字符串的最后一位 ,即根节点放在最后,可得后序遍历 }int main(){    char s1[1000]={0};    char s2[1000]={0};    char res[1000]={0};        int time;    cin>>time;    while(time--)    {     cin>>s1>>s2;     int len=strlen(s1);     get(len,s1,s2,res);     cout<<res<<endl;     }    // system("pause");     return 0;}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小米手机王者荣耀黑屏怎么办 小米5c手机黑屏怎么办 小米2s开机闪退怎么办 小米手机打不开机怎么办 苹果手机打电话闪退怎么办 红米手机通话时黑屏怎么办 小米手机通话时是黑屏怎么办? 华为手机通话时出现黑屏怎么办 微信屏幕变黑了怎么办 乐视手机打不开机怎么办 金立手机屏幕不亮怎么办 笔记本开不了机怎么办屏幕黑屏 红米4刷机失败怎么办 红米手机开不了机怎么办 红米not开不了机怎么办 红米2开不起机怎么办 小米手机免提声音小怎么办 红米手机1s黑屏怎么办 红米2完全黑屏怎么办 红米note3接电话黑屏怎么办 红米note3死机黑屏怎么办 红米note2开机之后黑屏怎么办 红米手机白屏怎么办 红米4黑屏打不开怎么办 oppo手机拨打电话时黑屏怎么办 华为手机拨打电话时黑屏怎么办 小米6x拨电话黑屏怎么办 魅族手机打电话黑屏怎么办 三星手机拨打电话时黑屏怎么办 华为畅享5打电话黑屏怎么办 小米note通话声音小怎么办 金立m5黑屏开不了机怎么办 金立手机光感器坏了怎么办 红掌根部烂了怎么办 魅族相册闪退怎么办 魅族手机闪退怎么办 苹果6手机主页面打不开怎么办 手机中病毒闪退怎么办 酷派手机开机黑屏怎么办啊 酷派手机黑屏打不开怎么办 酷派手机不开机怎么办