# leetcode construct binary tree from preoder and inorder results ```cpp= TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { unordered_map<int, int> valToInorderIndex; for (int i = 0; i < inorder.size(); ++i) { valToInorderIndex[inorder[i]] = i; } return build(preorder, inorder, 0, preorder.size() - 1, 0, inorder.size() - 1, valToInorderIndex); } TreeNode* build(vector<int>& preorder, vector<int>& inorder, int pl, int pr, int il, int ir, unordered_map<int, int>& valToInorderIndex) { if (pl > pr) { return NULL; } TreeNode* root = new TreeNode(preorder[pl]); int rootInorderIndex = valToInorderIndex[root->val]; int leftTreeSize = rootInorderIndex - il; root->left = build(preorder, inorder, pl + 1, pl + leftTreeSize, il, rootInorderIndex - 1, valToInorderIndex); root->right = build(preorder, inorder, pl + leftTreeSize + 1, pr, rootInorderIndex + 1, ir, valToInorderIndex); return root; } ```