在建立好二叉树之后进行前序遍历,当然,此处需要遵循RL的顺序进行,每一层只有一个结点被看见,因此利用map映射进行标识。

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 求二叉树的右视图
     * @param xianxu int整型vector 先序遍历
     * @param zhongxu int整型vector 中序遍历
     * @return int整型vector
     */
     TreeNode* Build(TreeNode* root,vector<int> pre,vector<int> vin,int s1,int e1,int s2,int e2){
        if(s1 > e1 || s2 > e2)
            return NULL;
        if(root == NULL){
            root = (TreeNode*)malloc(sizeof(TreeNode));
            root->val = pre[s1];
            root->left = NULL;
            root->right = NULL;
        }
        int num = pre[s1],pos = 0;
        for(int i = s2;i <= e2;++i){
            if(vin[i] == num){
                pos = i;
                break;
            }
        }
        root->left = Build(root->left,pre,vin,s1 + 1,s1 + pos - s2,s2,pos - 1);
        root->right = Build(root->right,pre,vin,s1 + pos - s2 + 1,e1,pos + 1,e2);
        return root;
    }
    vector<int> ans;
    map<int,int> mp;
    void predfs(TreeNode* root,int level){
        if(root == NULL)
            return ;
        if(mp.find(level) == mp.end()){
            mp[level] = 1;
            ans.push_back(root->val);
        }
        predfs(root->right,level + 1);
        predfs(root->left,level + 1);
    }
    vector<int> solve(vector<int>& xianxu, vector<int>& zhongxu) {
        TreeNode* root = NULL;
        root = Build(root,xianxu,zhongxu,0,xianxu.size() - 1,0,zhongxu.size() - 1);
        predfs(root,0);
        return ans;
    }
};