LeetCode 常用结构之 树
0

常用的数据结构

LeetCode 刷题的时候有几个常见的数据结构
其中最常用的是 链表
所以我把这两个数据结构单独写了两个包
下面先说的树结构

代码仓库:https://github.com/Han-MeiM/leetCode/tree/master/structure
原文地址:链表

树结构

package TreeNode

import (
    "fmt"
    "strconv"
    "strings"
)

type TreeNode struct {
    Val   int
    Left  *TreeNode
    Right *TreeNode
}

// 生成树结构
func CreateTestData(data string) *TreeNode {
    if data == "[]" {
        return nil
    }
    data = string([]rune(data)[1 : len(data)-1])
    res := strings.Split(data, ",")
    length := len(res)
    treeNode := make([]*TreeNode, length)
    for i := 0; i < length; i++ {
        if res[i] != "nil" {
            val, err := strconv.Atoi(res[i])
            if err != nil {
                panic(err)
            }
            treeNode[i] = &TreeNode{val, nil, nil}
        }
    }
    for i := 0; i < length; i++ {
        if treeNode[i] != nil {
            leftIndex := i*2 + 1
            if leftIndex < length && treeNode[leftIndex] != nil {
                treeNode[i].Left = treeNode[leftIndex]
            }
            rightIndex := leftIndex + 1
            if rightIndex < length && treeNode[leftIndex] != nil {
                treeNode[i].Right = treeNode[rightIndex]
            }
        }
    }
    return treeNode[0]
}

const spce = "      "

// 打印树
func Print(root *TreeNode) {
    treeNodePrint(root, 0)
}

func treeNodePrint(node *TreeNode, deep int) {
    if node == nil {
        printSpace(deep)
        fmt.Println("#")
        return
    }
    treeNodePrint(node.Right, deep+1)
    printSpace(deep)
    printNode(node.Val)
    treeNodePrint(node.Left, deep+1)
}

func printSpace(count int) {
    for i := 0; i < count; i++ {
        fmt.Printf(spce)
    }
}

func printNode(val int) {
    var buffer strings.Builder
    temp := strconv.Itoa(val)
    buffer.WriteString(temp)
    buffer.WriteString("<")
    spceNum := len(spce) - buffer.Len()
    for i := 0; i < spceNum; i++ {
        buffer.WriteString(" ")
    }
    fmt.Println(buffer.String())
}

使用

1.创建树结构

// 注意不要有空格
tree := TreeNode.CreateTestData("[1,2,3,4]")

2.打印树结构

TreeNode.Print(tree)

3.效果
file

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!