/**
* 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);
}
};