根节点的后一个元素一定的左子树的根
然后按中序遍历的形式递归一遍即可
核心代码如下:
vector<int> ans;
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int 二叉树节点数量
* @param pre intvector 前序序列
* @param suf intvector 后序序列
* @return intvector
*/
vector<int> ans;
void search(int l1,int r1,int l2,int r2,vector<int>& pre, vector<int>& suf){
int root = suf[r2];
int pos = -1;
for(int i = l2;i <= r2;i++)
if(suf[i] == pre[l1+1])
pos = i;
if(r1 > l1) search(l1+1,l1+1+pos-l2,l2,pos,pre,suf); //递归左子树
if(r1 >= l1 || r2 >= l2)ans.push_back(root); //防止重复push
if(r2 > l2) search(l1+pos-l2+2,r1,pos+1,r2-1,pre,suf); //递归右子树
}
vector<int> solve(int n, vector<int>& pre, vector<int>& suf) {
// write code here
search(0,n - 1,0,n - 1,pre,suf);
return ans;
}
};