109.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package main
  2. /**
  3. * Definition for singly-linked list.
  4. * type ListNode struct {
  5. * Val int
  6. * Next *ListNode
  7. * }
  8. */
  9. /**
  10. * Definition for a binary tree node.
  11. * type TreeNode struct {
  12. * Val int
  13. * Left *TreeNode
  14. * Right *TreeNode
  15. * }
  16. */
  17. func sortedListToBSTOld(head *ListNode) *TreeNode {
  18. list := make([]int, 0)
  19. curr := head
  20. for curr != nil {
  21. list = append(list, curr.Val)
  22. curr = curr.Next
  23. }
  24. return sortedArrayToBST(list)
  25. }
  26. func sortedArrayToBST(num []int) *TreeNode {
  27. length := len(num)
  28. if length == 0 {
  29. return nil
  30. } else if length == 1 {
  31. return &TreeNode{num[0], nil, nil}
  32. }
  33. mid := length / 2
  34. root := TreeNode{num[mid], nil, nil}
  35. root.Left = sortedArrayToBST(num[:mid])
  36. root.Right = sortedArrayToBST(num[mid+1:])
  37. return &root
  38. }
  39. func sortedListToBST(head *ListNode) *TreeNode {
  40. if head == nil {
  41. return nil
  42. } else if head.Next == nil {
  43. return &TreeNode{head.Val, nil, nil}
  44. }
  45. return listToBSTHelper(head, nil)
  46. }
  47. func listToBSTHelper(head, tail *ListNode) *TreeNode {
  48. if head == tail {
  49. return nil
  50. }
  51. slow := head
  52. fast := head
  53. for fast != tail && fast.Next != tail {
  54. slow = slow.Next
  55. fast = fast.Next.Next
  56. }
  57. root := TreeNode{slow.Val, nil, nil}
  58. root.Left = listToBSTHelper(head, slow)
  59. root.Right = listToBSTHelper(slow.Next, tail)
  60. return &root
  61. }
  62. // func main() {
  63. // printTree(sortedListToBST((toLinkedList(
  64. // []int{-10, -3, 0, 5, 9}))))
  65. // printTree(sortedListToBST((toLinkedList(
  66. // []int{}))))
  67. // printTree(sortedListToBST((toLinkedList(
  68. // []int{1, 2}))))
  69. // }