# 106-Construct Binary Tree from Inorder and Postorder Traversal ###### tags: `Medium` Hint: 改成從post-order找最後一個一定是root 再去分左右子樹 *注意左右子樹遞迴時 postl跟postr 和 inl跟inr 表示要正確 ```cpp= class Solution { public: TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { if(inorder.size() == 0 || postorder.size() == 0) return NULL; unordered_map<int, int> map; for(int i = 0; i < inorder.size(); i++){ map[inorder[i]] = i; } return helper(inorder, 0, inorder.size() - 1, postorder, 0, postorder.size() - 1, map); } TreeNode* helper(vector<int>& inorder, int in_start, int in_end, vector<int>& postorder, int post_start, int post_end, unordered_map<int, int>& map){ if(in_start > in_end || post_start > post_end) return NULL; int root_val = postorder[post_end]; TreeNode* root = new TreeNode(root_val); int index = map[root_val]; root->left = helper(inorder, in_start, index - 1, postorder, post_start, post_start + index - 1 - in_start, map); root->right = helper(inorder, index + 1, in_end, postorder, post_end - in_end + index, post_end - 1, map); return root; } }; ```