递归过程中先重建树的右子节点,根据深度输出第一次到达该深度的节点,因此无需建立树结构
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 求二叉树的右视图
* @param xianxu int整型vector 先序遍历
* @param zhongxu int整型vector 中序遍历
* @return int整型vector
*/
vector<int> res;
void dfs(vector<int> &xx, vector<int> &zx, int xl,
int xr, int zl,int zr,int len){//参数多是为了省空间在原数组做修改,xl代表先序左节点
if(xr < xl || zl > zr ){
return;
}
if(res.size() == len) res.push_back(xx[xl]);
auto it = find(zx.begin(),zx.end(),xx[xl]);
int num = it - zx.begin();
dfs(xx, zx, xl + 1 + num - zl, xr, num + 1, zr, len+1);
dfs(xx, zx, xl + 1, xl + num - zl, zl, num - 1, len + 1);
}
vector<int> solve(vector<int>& xianxu, vector<int>& zhongxu) {
// write code here
dfs(xianxu, zhongxu, 0,xianxu.size()-1,0,xianxu.size()-1,0);
return this->res;
}
};