题目:https://leetcode-cn.com/explore/learn/card/data-structure-binary-tree/4/conclusion/15/
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
if(inorder.size()==0) return NULL;
if(postorder.size()==0) return NULL;
if(inorder.size() != postorder.size()) return NULL;
return creatTree(inorder,0,inorder.size()-1, postorder,0,postorder.size()-1);
}
TreeNode* creatTree(vector<int>& inorder, int in_start, int in_end,
vector<int>& postorder,int post_start,int post_end){
if(post_start > post_end) return NULL;
int val = postorder[post_end];
TreeNode* root = new TreeNode(val);
int i = in_start;
for(;i <= in_end; i++) if(inorder[i] == val) break;
root->left = creatTree(inorder, in_start, i-1,
postorder, post_start, post_end + i - in_end - 1);
root->right = creatTree(inorder, i+1, in_end, postorder, post_end+i-in_end,post_end-1);
return root;
}
};