helper.go 2.6 KB

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