有中序遍历和后序遍历构建二叉树
/** * 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 }