题解 | #重建二叉树#
重建二叉树
http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6
递归,用和快排差不多的思路,分割每次构建子树的数组范围
class Solution {
public:
TreeNode* createBTree(vector<int> pre,vector<int> vin,int L,int R,int l,int r)
{
if(R < L || r<l)
return nullptr;
TreeNode* root = new TreeNode(pre[L]);
int pos = l;
for(pos = l;pos<r;pos++)
if(vin[pos] == pre[L])
break;
root->left = pos == l?nullptr:createBTree(pre, vin, L+1, L+pos-l,l,pos-1);
root->right = pos == r?nullptr:createBTree(pre, vin, L+pos-l+1,R,pos+1,r);
return root;
}
TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
int len = pre.size();
return createBTree(pre,vin,0,len-1,0,len-1);
}
};