106.go 850 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package main
  2. /**
  3. * Definition for a binary tree node.
  4. * type TreeNode struct {
  5. * Val int
  6. * Left *TreeNode
  7. * Right *TreeNode
  8. * }
  9. */
  10. func buildTree(inorder []int, postorder []int) *TreeNode {
  11. nodeCnt := len(inorder)
  12. if nodeCnt == 0 || nodeCnt != len(postorder) {
  13. return nil
  14. }
  15. root := TreeNode{postorder[nodeCnt-1], nil, nil}
  16. if nodeCnt == 1 {
  17. return &root
  18. }
  19. var idx int
  20. for idx = 0; idx < nodeCnt && inorder[idx] != root.Val; idx++ {
  21. }
  22. if idx != 0 {
  23. root.Left = buildTree(inorder[:idx], postorder[:idx])
  24. }
  25. if idx != nodeCnt-1 {
  26. root.Right = buildTree(inorder[idx+1:], postorder[idx:nodeCnt-1])
  27. }
  28. return &root
  29. }
  30. // func main() {
  31. // printTree(buildTree(
  32. // []int{4, 2, 5, 1, 6, 3, 7},
  33. // []int{4, 5, 2, 6, 7, 3, 1}))
  34. // printTree(buildTree(
  35. // []int{9, 3, 15, 20, 7},
  36. // []int{9, 15, 7, 20, 3}))
  37. // }