// File: print_utils.go // Created Time: 2022-12-03 // Author: Reanon (793584285@qq.com), krahets (krahets@163.com), msk397 (machangxinq@gmail.com) package pkg import ( "container/list" "fmt" "strconv" "strings" ) // PrintSlice 列印切片 func PrintSlice[T any](nums []T) { fmt.Printf("%v", nums) fmt.Println() } // PrintList 列印串列 func PrintList(list *list.List) { if list.Len() == 0 { fmt.Print("[]\n") return } e := list.Front() // 強轉為 string, 會影響效率 fmt.Print("[") for e.Next() != nil { fmt.Print(e.Value, " ") e = e.Next() } fmt.Print(e.Value, "]\n") } // PrintMap 列印雜湊表 func PrintMap[K comparable, V any](m map[K]V) { for key, value := range m { fmt.Println(key, "->", value) } } // PrintHeap 列印堆積 func PrintHeap(h []any) { fmt.Printf("堆積的陣列表示:") fmt.Printf("%v", h) fmt.Printf("\n堆積的樹狀表示:\n") root := SliceToTree(h) PrintTree(root) } // PrintLinkedList 列印鏈結串列 func PrintLinkedList(node *ListNode) { if node == nil { return } var builder strings.Builder for node.Next != nil { builder.WriteString(strconv.Itoa(node.Val) + " -> ") node = node.Next } builder.WriteString(strconv.Itoa(node.Val)) fmt.Println(builder.String()) } // PrintTree 列印二元樹 func PrintTree(root *TreeNode) { printTreeHelper(root, nil, false) } // printTreeHelper 列印二元樹 // This tree printer is borrowed from TECHIE DELIGHT // https://www.techiedelight.com/c-program-print-binary-tree/ func printTreeHelper(root *TreeNode, prev *trunk, isRight bool) { if root == nil { return } prevStr := " " trunk := newTrunk(prev, prevStr) printTreeHelper(root.Right, trunk, true) if prev == nil { trunk.str = "———" } else if isRight { trunk.str = "/———" prevStr = " |" } else { trunk.str = "\\———" prev.str = prevStr } showTrunk(trunk) fmt.Println(root.Val) if prev != nil { prev.str = prevStr } trunk.str = " |" printTreeHelper(root.Left, trunk, false) } type trunk struct { prev *trunk str string } func newTrunk(prev *trunk, str string) *trunk { return &trunk{ prev: prev, str: str, } } func showTrunk(t *trunk) { if t == nil { return } showTrunk(t.prev) fmt.Print(t.str) }