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
|
class Solution { public: TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { int n = inorder.size(); for (int i = 0; i < n; i++) index[inorder[i]] = i; return buildTree(postorder, 0, n - 1, 0, n - 1); } private: TreeNode* buildTree(vector<int>& postorder, int ibegin, int iend, int pbegin, int pend) { if (ibegin > iend) return nullptr; TreeNode* root = new TreeNode(postorder[pend]); int leftCount = index[postorder[pend]] - ibegin; root->left = buildTree(postorder, ibegin, ibegin + leftCount - 1, pbegin, pbegin + leftCount - 1); root->right = buildTree(postorder, ibegin + leftCount + 1, iend, pbegin + leftCount, pend - 1);
return root; } unordered_map<int, int> index; };
|