中序序列
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int 二叉树节点数量
* @param pre intvector 前序序列
* @param suf intvector 后序序列
* @return intvector
*/
vector<int> res;
vector<int> solve(int n, vector<int>& pre, vector<int>& suf) {
dfs(0, n - 1, 0, n - 1, pre, suf);
return res;
}
void dfs(int l1, int r1, int l2, int r2, vector<int>& pre, vector<int>& suf){
if(l1 > r1 || l1 < 0 || r1 > pre.size() - 1) return;
if(l1 == r1){
res.push_back(pre[l1]);
return;
}
int index = l2;
for( ; index <= r2; ++index){
if(suf[index] == pre[l1+1]) break;
}
dfs(l1 + 1, l1 + 1 + index - l2, l2, index, pre ,suf);
res.push_back(pre[l1]);
dfs(r1 - (r2 - index - 1) + 1, r1, index + 1, r2 - 1, pre, suf);
}
};