- 使用pre[l1]找到vin[index]
- 得到左子树的数量left=index-l2,右子树的数量right=r2-index
- 创建根节点,根节点的左子树=build(l1+1,l1+left,r1,index-1);根节点的右子树=build(l1+left+1,r1,index+1,r2);最后返回根节点
class Solution {
public:
TreeNode* build(vector<int>& pre,int l1,int r1,vector<int>& vin,int l2,int r2){
if(l1>r1||l2>r2) return NULL;
int val=pre[l1];
int index=l2;
for(;index<r2;index++)
if(vin[index]==val) break;
int left=index-l2;
int right=r2-index;
TreeNode* root=new TreeNode(val);
root->left=build(pre,l1+1,l1+left,vin,l2,index);
root->right=build(pre,l1+left+1,r1,vin,index+1,r2);
return root;
}
TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
return build(pre,0,pre.size()-1,vin,0,vin.size()-1);
}
};