Files
Yudong Jin 2f561d3d51 feat(ko): add the Korean online edition (#2006)
* feat(ko): add the complete Korean online edition

* Use UTF-8 for Python CI output on Windows

* Remove print-book promotion from the Korean site

* fix(ko): preserve emphasis before Korean particles
2026-10-29 03:46:43 +08:00

119 lines
2.3 KiB
Go

// File: print_utils.go
// Created Time: 2022-12-03
// Author: Reanon ([email protected]), krahets ([email protected]), msk397 ([email protected])
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: 이진 트리를 출력한다
// 이 트리 출력 코드는 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)
}