递归过程中先重建树的右子节点,根据深度输出第一次到达该深度的节点,因此无需建立树结构

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;
    }
};