/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */class Solution {public: unordered_map<int,int>index; TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { for(int i=0;i<inorder.size();i++){ index.emplace(inorder[i],i); } return builddfs(preorder,inorder,0,preorder.size()-1,0,preorder.size()-1); } TreeNode* builddfs(vector<int>& preorder, vector<int>& inorder,int preleft,int preright,int inleft,int inright){ if(preleft>preright){ return nullptr; } TreeNode* root=new TreeNode(preorder[preleft]); int inroot=index[preorder[preleft]]; int dif=inroot-inleft; root->left=builddfs(preorder,inorder,preleft+1,preleft+dif,inleft,inroot-1); root->right=builddfs(preorder,inorder,preleft+dif+1,preright,inroot+1,inright); return root; }};