95. 不同的二叉搜索树 II

  1. /**
  2. * Definition for a binary tree node.
  3. * type TreeNode struct {
  4. * Val int
  5. * Left *TreeNode
  6. * Right *TreeNode
  7. * }
  8. */
  9. func generateTrees(n int) []*TreeNode {
  10. if n <= 0 {
  11. return nil
  12. }
  13. return create(1, n)
  14. }
  15. func create(start, end int) []*TreeNode {
  16. if start > end {
  17. return []*TreeNode{nil}
  18. }
  19. all_Trees := []*TreeNode{}
  20. for i := start; i <= end; i++ {
  21. left_Trees := create(start, i - 1)
  22. right_Trees := create(i + 1, end)
  23. for _, left := range(left_Trees) {
  24. for _, right := range(right_Trees) {
  25. curTree := &TreeNode{i, nil, nil}
  26. curTree.Left = left
  27. curTree.Right = right
  28. all_Trees = append(all_Trees, curTree)
  29. }
  30. }
  31. }
  32. return all_Trees
  33. }