#include <iterator> #include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 求二叉树的右视图 * @param xianxu int整型vector 先序遍历 * @param zhongxu int整型vector 中序遍历 * @return int整型vector */ vector<int> ans; TreeNode* create(vector<int> pre, int l1, int r1, vector<int> in, int l2, int r2) { int mid; for (int i = 0; i < in.size(); i++) { if (in[i] == pre[l1]) { mid = i; break; } } TreeNode* node = new TreeNode(pre[l1]); int llen = mid - l2; int rlen = r2 - mid; if (llen > 0) { node->left = create(pre, l1 + 1, l1 + llen, in, l2, l2 + llen - 1); } else node->left = nullptr; if (rlen > 0) { node->right = create(pre, l1 + 1 + llen, r2, in, l2 + llen + 1, r2); } else node->right = nullptr; return node; } void find(TreeNode* T){ queue<TreeNode*> Q; if(T){ Q.push(T); } // cout<<T->left->left->val; while(!empty(Q)){ int size=Q.size(); for(int i=0;i<size;i++){ T=Q.front(); Q.pop(); if(T->left) Q.push(T->left); if(T->right) Q.push(T->right); if(i==size-1){ ans.push_back(T->val); } } } } vector<int> solve(vector<int>& xianxu, vector<int>& zhongxu) { // write code here if(xianxu.size()==0) return ans; find( create(xianxu,0,xianxu.size()-1,zhongxu,0,zhongxu.size()-1)); return ans; } };