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