递归,代码如下:
class Solution {
public:
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
return buildTree1(inorder, postorder, 0, 0, inorder.size());
}
TreeNode *buildTree1(vector<int> &inorder, vector<int> &postorder, int begin1, int begin2, int len) {
if(len == 0) return NULL;
TreeNode *left, *right, *rootNode;
int root = postorder[begin2+len-1];
int index = begin1;
for(; index<begin1+len; ++index) {
if(inorder[index] == root) {
rootNode = new TreeNode(root);
rootNode->left = buildTree1(inorder, postorder, begin1, begin2, index-begin1);
rootNode->right= buildTree1(inorder, postorder, index+1, begin2+(index-begin1), len-(index-begin1)-1);
return rootNode;
}
}
}
};
9.02最新代码,注意细节:
class Solution {
public:
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
int len = inorder.size();
if(len == 0) return NULL;
return build(inorder, postorder, 0, 0, len);
}
TreeNode *build(vector<int> &inorder, vector<int> &postorder, int si, int sp, int len)
{
if(len<=0) return NULL;
TreeNode *root = new TreeNode(postorder[sp+len-1]);
for(int i=0; i<len; i++)
{
if(postorder[sp+len-1] == inorder[si+i])
{
root->left = build(inorder, postorder, si, sp, i);
root->right = build(inorder, postorder, si+i+1, sp+i, len-i-1);
return root;
}
}
}
};