helper.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. package main
  2. import (
  3. "strconv"
  4. )
  5. // Integer ...
  6. type Integer *int
  7. func newInt(n int) Integer {
  8. i := new(int)
  9. *i = n
  10. return i
  11. }
  12. // Point ...
  13. type Point struct {
  14. X int
  15. Y int
  16. }
  17. // ListNode ...
  18. type ListNode struct {
  19. Val int
  20. Next *ListNode
  21. }
  22. // TreeNode ...
  23. type TreeNode struct {
  24. Val int
  25. Left *TreeNode
  26. Right *TreeNode
  27. }
  28. // Interval ...
  29. type Interval struct {
  30. Start int
  31. End int
  32. }
  33. func abs(x int) int {
  34. if x < 0 {
  35. return -x
  36. }
  37. return x
  38. }
  39. func maxInt(x, y int) int {
  40. if x > y {
  41. return x
  42. }
  43. return y
  44. }
  45. func minInt(x, y int) int {
  46. if x < y {
  47. return x
  48. }
  49. return y
  50. }
  51. func minInts(vals ...int) (min int) {
  52. min = vals[0]
  53. for i := 1; i < len(vals); i++ {
  54. if vals[i] < min {
  55. min = vals[i]
  56. }
  57. }
  58. return
  59. }
  60. func toLinkedList(num []int) *ListNode {
  61. length := len(num)
  62. if length == 0 {
  63. return nil
  64. }
  65. head := ListNode{num[0], nil}
  66. curr := &head
  67. for i := 1; i < length; i++ {
  68. curr.Next = &ListNode{num[i], nil}
  69. curr = curr.Next
  70. }
  71. return &head
  72. }
  73. func printList(head *ListNode) {
  74. curr := head
  75. for curr != nil {
  76. print(strconv.FormatInt(int64(curr.Val), 10), " ")
  77. curr = curr.Next
  78. }
  79. println()
  80. }
  81. func sortedToBST(nums []int) *TreeNode {
  82. if len(nums) == 0 {
  83. return nil
  84. }
  85. mid := len(nums) / 2
  86. root := TreeNode{nums[mid], nil, nil}
  87. // only one element in nums, return TreeNode{ele, nil, nil}
  88. if mid == 0 {
  89. return &root
  90. }
  91. root.Left = sortedToBST(nums[:mid])
  92. root.Right = sortedToBST(nums[mid+1:])
  93. return &root
  94. }
  95. func toBinaryTree(nums ...Integer) *TreeNode {
  96. if nums[0] == nil {
  97. return nil
  98. }
  99. root := &TreeNode{*nums[0], nil, nil}
  100. upperLevel := []*TreeNode{root}
  101. thisLevel := []*TreeNode{}
  102. var curr *TreeNode
  103. for i := 1; i < len(nums); i++ {
  104. if i%2 == 1 { // Left child
  105. curr = upperLevel[0]
  106. upperLevel = upperLevel[1:]
  107. if nums[i] != nil {
  108. curr.Left = &TreeNode{*nums[i], nil, nil}
  109. thisLevel = append(thisLevel, curr.Left)
  110. }
  111. } else { // Right child
  112. if nums[i] != nil {
  113. curr.Right = &TreeNode{*nums[i], nil, nil}
  114. thisLevel = append(thisLevel, curr.Right)
  115. }
  116. if len(upperLevel) == 0 {
  117. upperLevel = thisLevel
  118. thisLevel = []*TreeNode{}
  119. }
  120. }
  121. }
  122. return root
  123. }
  124. func printTree(root *TreeNode) { // Level order traversal
  125. if root == nil {
  126. println("nil")
  127. return
  128. }
  129. queue := make([]*TreeNode, 0) // Important!
  130. queue = append(queue, root)
  131. for len(queue) != 0 {
  132. curr := queue[0]
  133. queue = queue[1:] // Dequeue
  134. if curr == nil {
  135. print("nil ")
  136. continue
  137. }
  138. print(curr.Val, " ")
  139. queue = append(queue, curr.Left)
  140. queue = append(queue, curr.Right)
  141. }
  142. println()
  143. }
  144. func printBoard(board [][]byte) {
  145. for _, row := range board {
  146. for _, grid := range row {
  147. print(string(grid), " ")
  148. }
  149. println()
  150. }
  151. }