一、题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/09ad48a6c43cfbcd46d9bf6a7dfad790.png)
二、思路
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/40f9e52a0687e82803241bbaf8328e1b.png)
三、代码
class Solution {
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
unordered_map<int,int>dic;
for(int i=0;i<inorder.size();++i)
{
dic.emplace(inorder[i],i);
}
return dfs(preorder,inorder,dic,0,0,inorder.size()-1);
}
TreeNode* dfs(vector<int>& preorder, vector<int>& inorder,unordered_map<int,int>&dic,int root,int left,int right)
{
if(left>right)
{
return nullptr;
}
TreeNode *head=new TreeNode(preorder[root]);
int len=dic[preorder[root]];
head->left=dfs(preorder,inorder,dic,root+1,left,len-1);
head->right=dfs(preorder,inorder,dic,root+len-left+1,len+1,right);
return head;
}
};