| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 | 
							- package main
 
- import (
 
- 	"strconv"
 
- )
 
- // Integer ...
 
- type Integer *int
 
- func newInt(n int) Integer {
 
- 	i := new(int)
 
- 	*i = n
 
- 	return i
 
- }
 
- // Point ...
 
- type Point struct {
 
- 	X int
 
- 	Y int
 
- }
 
- // ListNode ...
 
- type ListNode struct {
 
- 	Val  int
 
- 	Next *ListNode
 
- }
 
- // TreeNode ...
 
- type TreeNode struct {
 
- 	Val   int
 
- 	Left  *TreeNode
 
- 	Right *TreeNode
 
- }
 
- // Interval ...
 
- type Interval struct {
 
- 	Start int
 
- 	End   int
 
- }
 
- func abs(x int) int {
 
- 	if x < 0 {
 
- 		return -x
 
- 	}
 
- 	return x
 
- }
 
- func maxInt(x, y int) int {
 
- 	if x > y {
 
- 		return x
 
- 	}
 
- 	return y
 
- }
 
- func minInt(x, y int) int {
 
- 	if x < y {
 
- 		return x
 
- 	}
 
- 	return y
 
- }
 
- func minInts(vals ...int) (min int) {
 
- 	min = vals[0]
 
- 	for i := 1; i < len(vals); i++ {
 
- 		if vals[i] < min {
 
- 			min = vals[i]
 
- 		}
 
- 	}
 
- 	return
 
- }
 
- func toLinkedList(num []int) *ListNode {
 
- 	length := len(num)
 
- 	if length == 0 {
 
- 		return nil
 
- 	}
 
- 	head := ListNode{num[0], nil}
 
- 	curr := &head
 
- 	for i := 1; i < length; i++ {
 
- 		curr.Next = &ListNode{num[i], nil}
 
- 		curr = curr.Next
 
- 	}
 
- 	return &head
 
- }
 
- func printList(head *ListNode) {
 
- 	curr := head
 
- 	for curr != nil {
 
- 		print(strconv.FormatInt(int64(curr.Val), 10), " ")
 
- 		curr = curr.Next
 
- 	}
 
- 	println()
 
- }
 
- func sortedToBST(nums []int) *TreeNode {
 
- 	if len(nums) == 0 {
 
- 		return nil
 
- 	}
 
- 	mid := len(nums) / 2
 
- 	root := TreeNode{nums[mid], nil, nil}
 
- 	// only one element in nums, return TreeNode{ele, nil, nil}
 
- 	if mid == 0 {
 
- 		return &root
 
- 	}
 
- 	root.Left = sortedToBST(nums[:mid])
 
- 	root.Right = sortedToBST(nums[mid+1:])
 
- 	return &root
 
- }
 
- func toBinaryTree(nums ...Integer) *TreeNode {
 
- 	if nums[0] == nil {
 
- 		return nil
 
- 	}
 
- 	root := &TreeNode{*nums[0], nil, nil}
 
- 	upperLevel := []*TreeNode{root}
 
- 	thisLevel := []*TreeNode{}
 
- 	var curr *TreeNode
 
- 	for i := 1; i < len(nums); i++ {
 
- 		if i%2 == 1 { // Left child
 
- 			curr = upperLevel[0]
 
- 			upperLevel = upperLevel[1:]
 
- 			if nums[i] != nil {
 
- 				curr.Left = &TreeNode{*nums[i], nil, nil}
 
- 				thisLevel = append(thisLevel, curr.Left)
 
- 			}
 
- 		} else { // Right child
 
- 			if nums[i] != nil {
 
- 				curr.Right = &TreeNode{*nums[i], nil, nil}
 
- 				thisLevel = append(thisLevel, curr.Right)
 
- 			}
 
- 			if len(upperLevel) == 0 {
 
- 				upperLevel = thisLevel
 
- 				thisLevel = []*TreeNode{}
 
- 			}
 
- 		}
 
- 	}
 
- 	return root
 
- }
 
- func printTree(root *TreeNode) { // Level order traversal
 
- 	if root == nil {
 
- 		println("nil")
 
- 		return
 
- 	}
 
- 	queue := make([]*TreeNode, 0) // Important!
 
- 	queue = append(queue, root)
 
- 	for len(queue) != 0 {
 
- 		curr := queue[0]
 
- 		queue = queue[1:] // Dequeue
 
- 		if curr == nil {
 
- 			print("nil ")
 
- 			continue
 
- 		}
 
- 		print(curr.Val, " ")
 
- 		queue = append(queue, curr.Left)
 
- 		queue = append(queue, curr.Right)
 
- 	}
 
- 	println()
 
- }
 
- func printBoard(board [][]byte) {
 
- 	for _, row := range board {
 
- 		for _, grid := range row {
 
- 			print(string(grid), " ")
 
- 		}
 
- 		println()
 
- 	}
 
- }
 
 
  |