1. 题目描述
2. 思路分析
3. 代码展示
class Solution {
public:
TreeNode* _build(vector<int>& inorder, int L, int R, vector<int>& postorder, int& idx) {
if(L > R)
return nullptr;
TreeNode* root = new TreeNode(postorder[idx]);
int i = L;
for(; i <= R; i++) {
if(root->val == inorder[i])
break;
}
if(R > i) {
--idx;
root->right = _build(inorder, i + 1, R, postorder, idx);
}
else {
root->right = nullptr;
}
if(L < i) {
--idx;
root->left = _build(inorder, L, i - 1, postorder, idx);
}
else {
root->left = nullptr;
}
return root;
}
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
int idx = postorder.size() - 1;
return _build(inorder, 0, inorder.size() - 1, postorder,idx);
}
};