题目链接:www.nowcoder.com/practice/8a…
还是要告诉自己,多写例子,多想
class Solution {
public:
unordered_map<int, int> index;
TreeNode* buildTree(vector<int>pre,vector<int>vin,int sub)
{
if(pre.empty()) return nullptr;
if(pre.size() == 1) return (new TreeNode(pre[0]));
int rootVal = pre[0];
TreeNode *rootNode = new TreeNode(rootVal);
int pos = index[rootVal]-sub;
int leftSize = pos, rightSize = vin.size()-pos-1;
//创建左右子树,时间复杂度为1
vector<int> leftPre(pre.begin()+1,pre.begin()+1+leftSize);
vector<int> rightPre(pre.begin()+1+leftSize,pre.end());
vector<int> leftVin(vin.begin(),vin.begin()+leftSize);
vector<int> rightVin(vin.begin()+leftSize+1,vin.end());
rootNode->left = buildTree(leftPre, leftVin, sub);
rootNode->right = buildTree(rightPre, rightVin, sub+leftSize+1);
return rootNode;
}
TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
//采用了分治的方法
index.clear();
for(int i=0;i<vin.size();i++) index[vin[i]] = i;
return buildTree(pre, vin,0);
}
};