/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/这不是我自己写出来的,看了别人的方法,然后理解 了
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param inorder int整型一维数组 中序遍历序列
* @param inorderLen int inorder数组长度
* @param postorder int整型一维数组 后序遍历序列
* @param postorderLen int postorder数组长度
* @return TreeNode类
*/
struct TreeNode* buildTree(int* inorder, int inorderLen, int* postorder, int postorderLen ) {
// write code here
struct TreeNode* p;
int index = 0;
if(inorderLen == 0){return NULL;}
while(inorder[index]!=postorder[inorderLen-1]){
//最后一个
index++;
// 如果给的正确不会出现找不到的情况
}
p = malloc(sizeof(struct TreeNode));
p->val = inorder[index];
p->left = buildTree(inorder, index, postorder, postorderLen);
// 因为长度一致,中序= x个左子树 + root+y个右子树 ,后序= x个左子树 + y个右子树 + root;
// 所以找postorder [index -1]
p->right = buildTree(inorder+index+1, inorderLen -index-1, postorder+index, postorderLen-index-1) ;
return p;
}