1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
class Solution { public: TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { for (int i = 0; i < inorder.size(); ++i) { m[inorder[i]] = i; } return helper(preorder, 0, preorder.size() - 1, inorder, 0, inorder.size() - 1); }
TreeNode *helper(const vector<int> &preorder, int pl, int pr, const vector<int> &inorder, int il, int ir) { if (pl > pr) return nullptr; auto res = new TreeNode(preorder[pl]); int lpl = pl + 1; int lir = m[preorder[pl]] - 1; int lil = il; int lpr = lpl + lir - lil; res->left = helper(preorder, lpl, lpr, inorder, lil, lir); int rpl = lpr + 1; int rpr = pr; int ril = lir + 2; int rir = ir; res->right = helper(preorder, rpl, rpr, inorder, ril, rir); return res; }
unordered_map<int, int> m; };
|