105.go 1005 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  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 buildTreeByPreorderAndInorder(preorder []int, inorder []int) *TreeNode {
  11. // func buildTree(preorder []int, inorder []int) *TreeNode {
  12. nodeCnt := len(preorder)
  13. if nodeCnt == 0 || nodeCnt != len(inorder) {
  14. return nil
  15. }
  16. root := TreeNode{preorder[0], nil, nil}
  17. if nodeCnt == 1 { // No children
  18. return &root
  19. }
  20. var idx int
  21. for idx = 0; idx < nodeCnt && inorder[idx] != root.Val; idx++ {
  22. // Find the root index in inorder traversal
  23. }
  24. if idx != 0 { // If have left children
  25. root.Left = buildTree(preorder[1:1+idx], inorder[:idx])
  26. }
  27. if idx != nodeCnt-1 { // If have right children
  28. root.Right = buildTree(preorder[idx+1:], inorder[idx+1:])
  29. }
  30. return &root
  31. }
  32. // func main() {
  33. // printTree(buildTree(
  34. // []int{1, 2, 4, 5, 3, 6, 7},
  35. // []int{4, 2, 5, 1, 6, 3, 7}))
  36. // printTree(buildTree(
  37. // []int{1, 2},
  38. // []int{1, 2}))
  39. // }