题目描述
代码
class Solution {
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
int n = preorder.size();
for (int i = 0; i < n; ++i) {
map[inorder[i]] = i;
}
return build(preorder, inorder, 0, n - 1, 0, n - 1);
}
TreeNode* build(vector<int>& preorder, vector<int>& inorder, int preorder_left, int preorder_right, int inorder_left, int inorder_right) {
if (preorder_left > preorder_right) {
return nullptr;
}
int preorder_root_index = preorder_left;
int inorder_root_index = map[preorder[preorder_root_index]];
TreeNode* root = new TreeNode(preorder[preorder_root_index]);
int left_subtree_size = inorder_root_index - inorder_left;
root->left = build(preorder, inorder, preorder_root_index + 1, preorder_root_index + left_subtree_size, inorder_left, inorder_root_index - 1);
root->right = build(preorder, inorder, preorder_root_index + left_subtree_size + 1, preorder_right, inorder_root_index + 1, inorder_right);
return root;
}
private:
unordered_map<int, int> map;
};