![]()
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func buildTree(inorder []int, postorder []int) *TreeNode {
return build(inorder,0,len(inorder)-1,postorder,0,len(postorder)-1)
}
func build(inorder []int,s1,e1 int,postorder []int,s2,e2 int)*TreeNode{
if s1>e1{
return nil
}
//根节点的值肯定是后序遍历的最后一个节点
rootVal:=postorder[e2]
//在中序遍历结果里查找根节点的索引
inIdx:=s1
for i:=s1;i<e1;i++{
if rootVal==inorder[i]{
inIdx=i
break
}
}
//构造根节点
root:=&TreeNode{}
root.Val=rootVal
//递归构造左右子树
leftSize:=inIdx-s1
root.Left=build(inorder,s1,inIdx-1,postorder,s2,s2+leftSize-1)
root.Right=build(inorder,inIdx+1,e1,postorder,s2+leftSize,e2-1)
return root
}