/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ #include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param inorder int整型vector 中序遍历序列 * @param postorder int整型vector 后序遍历序列 * @return TreeNode类 */ TreeNode* build (vector<int>& inorder, vector<int>& postorder, int ll, int lr, int rl, int rr) { if (ll > lr) { return nullptr; } int val = postorder[rr]; int i = ll; while (inorder[i] != val) { ++i; } int size = i - ll; TreeNode* root = new TreeNode(val); root->left = build(inorder, postorder, ll, i - 1, rl, rl + size - 1); root->right = build(inorder, postorder, i + 1, lr, rl + size, rr - 1); return root; } TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { int n = inorder.size(); return build(inorder, postorder, 0, n - 1, 0, n - 1); } };