重建二叉树
OJ地址:重建二叉树
TreeNode* rebuild(vector<int> pre,int pre_left, int pre_right, vector<int> vin, int in_left, int in_right) {
if(pre_left > pre_right) return nullptr;
TreeNode *root = new TreeNode(pre[pre_left]);
for(int i = in_left; i <= in_right; i++)
{
if(vin[i] == root->val)
{
//构建左子树
root->left = rebuild(pre, pre_left + 1, pre_left + i - in_left, vin, in_left, i - 1);
//构建右子树
root->right = rebuild(pre, pre_left + i - in_left + 1, pre_right, vin, i + 1, in_right);
break;
}
}
return root;
}
TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
if(pre.size() == 0)
return nullptr;
return rebuild(pre, 0, pre.size() - 1, vin, 0, vin.size() - 1);
}