题目: [NOIP2001]求先序排列 ,哈哈,我们今天来看一道二叉树的递归题嘛,这是选自NOIP上的一道题,好了,我们一起来看看题意吧:
题目描述是复制的,可能有部分显示不对,我就把题目链接放下面!
题目链接: [NOIP2001]求先序排列
题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度 ≤ 8)。
输入描述
2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出描述
1行,表示一棵二叉树的先序。
示例1
输入
BADC
BDCA
输出
ABCD
思路
:
总体思路就是递归的处理左子树和右子树,代码里面有注释!
我们来看看成功AC的代码吧:
#include<bits/stdc++.h> using namespace std; string zhong,hou; void deal(int l1,int r1,int l2,int r2){//l1到r1的中序遍历, l2到r2的后序遍历 if(l1>r1||l2>r2) return ; cout<<hou[r2]; int pos=-1; for(int i=0;i<=r1;i++) if(zhong[i]==hou[r2]) pos=i; deal(l1,pos-1,l2,l2+pos-1-l1);//先看左子树 deal(pos+1,r1,r2-r1+pos,r2-1);//看右子树 } int main(){ cin>>zhong>>hou; int len=hou.length(); deal(0,len-1,0,len-1); return 0; }