class Solution { public: vector<int> solve(vector<int>& xianxu, vector<int>& zhongxu) { TreeNode* res = build(xianxu, 0, xianxu.size()-1,zhongxu, 0, zhongxu.size()-1); // 建立二叉树 queue<TreeNode *> q; // 层次遍历 q.push(res); vector<int> ans; while(!q.empty()){ int size = q.size(); //当前层队列元素个数 while(size--){ TreeNode *tmp = q.front(); q.pop(); if(size == 0)ans.push_back(tmp->val); //当前层最后一个元素加入ans,即右视图 if(tmp->left)q.push(tmp->left); // 下一层元素入队 if(tmp->right)q.push(tmp->right); } } return ans; } TreeNode* build(vector<int>& xianxu,int l1,int r1, vector<int>& zhongxu, int l2, int r2){ int k; for(k = l2; k <= r2; k++){ if(zhongxu[k] == xianxu[l1]) break; // 先序第一个在中序中的结点位置 } if(k > r2) return NULL; // 没找到返回空 TreeNode * res = new TreeNode(xianxu[l1]); // 个根节点 res->left = build(xianxu, l1+1,l1+k-l2,zhongxu,l2,k-1); // 根节点左子树 res->right = build(xianxu, l1+k-l2+1, r1, zhongxu, k+1, r2); // 右子树 return res; } };