| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 | package mainimport (	"strconv")// Integer ...type Integer *intfunc 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()	}}
 |