| 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}))
 
- // }
 
 
  |