package main
import "fmt"
// 二叉数
type TreeNode struct {
Data string
LefeNode *TreeNode
RightNode *TreeNode
}
func main() {
// 创建二叉树
tn := Create()
PreTraverse(tn)
fmt.Println("")
InTraverse(tn)
fmt.Println("")
PostTraverse(tn)
}
// 创建静态二叉树
func Create() *TreeNode {
tnA := &TreeNode{Data: "A"}
tnB := &TreeNode{Data: "B"}
tnC := &TreeNode{Data: "C"}
tnD := &TreeNode{Data: "D"}
tnE := &TreeNode{Data: "E"}
tnF := &TreeNode{Data: "F"}
tnG := &TreeNode{Data: "G"}
tnH := &TreeNode{Data: "H"}
tnA.LefeNode = tnB
tnA.RightNode = tnF
tnB.LefeNode = nil
tnB.RightNode = tnC
tnC.LefeNode = tnD
tnC.RightNode = tnE
tnD.LefeNode = nil
tnD.RightNode = nil
tnE.LefeNode = nil
tnE.RightNode = nil
tnF.LefeNode = nil
tnF.RightNode = tnG
tnG.LefeNode = tnH
tnG.RightNode = nil
tnH.LefeNode = nil
tnH.RightNode = nil
return tnA
}
// 先序遍历
func PreTraverse(tn *TreeNode) {
if tn != nil {
fmt.Printf(tn.Data)
if nil != tn.LefeNode {
PreTraverse(tn.LefeNode)
}
if nil != tn.RightNode {
PreTraverse(tn.RightNode)
}
}
}
// 中序遍历
func InTraverse(tn *TreeNode) {
if tn != nil {
if nil != tn.LefeNode {
InTraverse(tn.LefeNode)
}
fmt.Printf(tn.Data)
if nil != tn.RightNode {
InTraverse(tn.RightNode)
}
}
}
// 后序遍历
func PostTraverse(tn *TreeNode) {
if tn != nil {
if nil != tn.LefeNode {
PostTraverse(tn.LefeNode)
}
if nil != tn.RightNode {
PostTraverse(tn.RightNode)
}
fmt.Printf(tn.Data)
}
}
结果:
C:\Users\m\Desktop\src\test>go run main.go
ABCDEFGH
BDCEAFHG
DECBHGFA