46.Go语言·数据结构·二叉树(遍历)

2019-06-23  本文已影响0人  一枼落知天下

main.go

// Go语言·数据结构·二叉树
package main

import (
    "fmt"
)

var content string = `
————————————————Go语言·数据结构·二叉树————————————————————
一、二叉树
    根节点
    父节点
    子节点
    叶节点
`

type Hero struct {
    No int
    Name string
    Left *Hero
    Right *Hero
}

// 前序遍历
// 先输出根节点,然后在输出左子树,在输出右子树
func PreOrder(node *Hero) {
    if node != nil {
        fmt.Printf("<No.%d %s> \n",node.No,node.Name)
        PreOrder(node.Left)
        PreOrder(node.Right)
    }
}

// 中序遍历
// 先输出根的左子树,然后在根节点,在输出根的右子树
func InfixOrder(node *Hero) {
    if node != nil {
        PreOrder(node.Left)
        fmt.Printf("<No.%d %s> \n",node.No,node.Name)
        PreOrder(node.Right)
    }
}


// 后序遍历
// 先输出根的左子树,在输出根的右子树,最后根节点
func PostOrder(node *Hero) {
    if node != nil {
        PreOrder(node.Left)
        PreOrder(node.Right)
        fmt.Printf("<No.%d %s> \n",node.No,node.Name)
    }
}


func main() {
    root:= &Hero{
        No:1,
        Name:"宋江",
    }


    left1:= &Hero{
        No:2,
        Name:"吴用",
    }

    right1:= &Hero{
        No:3,
        Name:"卢俊义",
    }

    root.Left  = left1
    root.Right = right1

    right2:= &Hero{
        No:4,
        Name:"林冲",
    }

    right1.Right = right2

    left3:= &Hero{
        No:10,
        Name:"Uzi",
    }

    left4:= &Hero{
        No:11,
        Name:"Faker",
    }

    left1.Left  = left3
    left1.Right = left4

    PreOrder(root)
    fmt.Println()
    InfixOrder(root)
    fmt.Println()
    PostOrder(root)
}
上一篇 下一篇

猜你喜欢

热点阅读