Definition for a binary tree node.
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode* _buildTree(int* inorder, int inbegin,int inend, int* postorder, int pindex){
struct TreeNode root=(struct TreeNode*)malloc(sizeof(struct TreeNode));
if(inbegin>inend)
return NULL;
root->val=postorder[*pindex];
(*pindex)--;
if(inbegin==inend)
{
root->left=NULL;
root->right=NULL;
return root;
}
int rootindex=inbegin;
while(rootindex<=inend)
{
if(inorder[rootindex]==root->val)
{
break;
}
else
rootindex++;
}
assert(rootindex<=inend);
root->right=_buildTree(inorder,rootindex+1,inend,postorder,pindex);
root->left=_buildTree(inorder,inbegin,rootindex-1,postorder,pindex);
return root;
}
struct TreeNode* buildTree(int* inorder, int inorderSize, int* postorder, int postSize)
{
int index = postSize-1;
return _buildTree(inorder,0,inorderSize-1,postorder,&index);
}