
解题思路:

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* buildTreedfs(map<int,int>& mp,
vector<int>& preorder, vector<int>& inorder,
int PreLeft,int PreRight,int InLeft,int InRight)
{
if(InLeft>InRight || PreLeft>PreRight) return nullptr;
int rootval=preorder[PreLeft];
TreeNode* root=new TreeNode(rootval);//前序开头一定是根节点
int Index=mp[rootval];//找中序遍历找到前序遍历中对应根节点位置的值
root->left=buildTreedfs(mp,preorder,inorder,PreLeft+1,PreLeft+Index-InLeft,InLeft,Index-1);
root->right=buildTreedfs(mp,preorder,inorder,PreLeft+Index-InLeft+1,PreRight,Index+1,InRight);
return root;
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
map<int,int> mp;//如果是vector容器,想赋值必须申请空间
int PreLeft=0,PreRight=preorder.size()-1;
int InLeft=0,InRight=inorder.size()-1;
for(int i=0;i<inorder.size();i++)//标定中序遍历的位置
mp[inorder[i]]=i;
return buildTreedfs(mp,preorder,inorder,PreLeft,PreRight,InLeft,InRight);
}
};