前序:中左右
中序:左中右
使用unordermap,可以提高效率
具体解释见注释
class Solution {
public:
unordered_map<int, int> pos;
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
int n = preorder.size();
for (int i = 0; i < n; ++i){
pos[inorder[i]] = i;
}
return dfs(preorder, inorder, 0, n-1, 0, n-1);
}
TreeNode* dfs(vector<int> preorder, vector<int> inorder, int pl, int pr, int il, int ir){
if (pl > pr) return NULL;
int val = preorder[pl];
int k = pos[val];
int len = k - il;
auto root = new TreeNode(val);
root->left = dfs(preorder, inorder, pl+1, pl + len, il, k-1);
root->right = dfs(preorder, inorder, pl+len+1, pr, k+1, ir);
return root;
}
};