题目:
思想:递归,注意细节
代码展示:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* buildTreeCore(int* inorder, int instart, int inend, int* postorder, int poststart, int *postend)
{
if(poststart>postend || instart>inend)
{
return NULL;
}
struct TreeNode *root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val = postorder[*postend];
int i = instart;
while(i<=inend)
{
if(postorder[*postend]==inorder[i])
{
break;
}
i++;
}
if(i==inend+1)
{
return NULL;
}
*postend = (*postend)-1;
root->right = buildTreeCore(inorder,i+1,inend,postorder,poststart,postend);
root->left = buildTreeCore(inorder,instart,i-1,postorder,poststart,postend);
return root;
}
struct TreeNode* buildTree(int* inorder, int inorderSize, int* postorder, int postorderSize){
if(inorderSize<1 || inorder==NULL || inorderSize!=postorderSize)
{
return NULL;
}
int postend = postorderSize-1;
struct TreeNode *root = buildTreeCore(inorder,0,inorderSize-1,postorder,0,&postend);
return root;
}