| 123456789101112131415161718192021222324252627282930313233343536373839 | package main/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */func buildTree(inorder []int, postorder []int) *TreeNode {	nodeCnt := len(inorder)	if nodeCnt == 0 || nodeCnt != len(postorder) {		return nil	}	root := TreeNode{postorder[nodeCnt-1], nil, nil}	if nodeCnt == 1 {		return &root	}	var idx int	for idx = 0; idx < nodeCnt && inorder[idx] != root.Val; idx++ {	}	if idx != 0 {		root.Left = buildTree(inorder[:idx], postorder[:idx])	}	if idx != nodeCnt-1 {		root.Right = buildTree(inorder[idx+1:], postorder[idx:nodeCnt-1])	}	return &root}// func main() {// 	printTree(buildTree(// 		[]int{4, 2, 5, 1, 6, 3, 7},// 		[]int{4, 5, 2, 6, 7, 3, 1}))// 	printTree(buildTree(// 		[]int{9, 3, 15, 20, 7},// 		[]int{9, 15, 7, 20, 3}))// }
 |