【题目】
https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/
【思路】
根据前序遍历的特点,则第一个元素是根节点,
根据中序遍历的特点,位于根节点左侧的元素为左子树,右侧的元素为右子树
【C++代码】
class Solution
{
public:
TreeNode* helper(vector<int>&pre, map<int,int>& idx, int &preindex, int left, int right)
{
if(left==right)
return NULL;
int value=pre[preindex];
preindex++;
TreeNode* root=new TreeNode(value);
int id=idx[value];//value出现的位置,则左侧为左子树,右侧为右子树
root->left=helper(pre,idx,preindex, left,id);
root->right=helper(pre,idx,preindex,id+1,right);
return root;
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder)
{
map<int,int>idx;
for(int i=0; i<inorder.size(); i++)
idx[inorder[i]]=i;
int preindex=0;
return helper(preorder,idx,preindex,0,inorder.size());
}
}