package main
import (
"fmt"
"math"
)
// 二叉树的数据结构
type TreeNode struct {
Data int
Left *TreeNode
Right *TreeNode
}
// 新增节点
func (node *TreeNode) Add(v int) {
//根节点
if node.Data == math.MinInt64 {
node.Data = v
return
}
if v < node.Data {
if node.Left != nil {
node.Left.Add(v)
} else {
node.Left = &TreeNode{v, nil, nil}
}
} else {
if node.Right != nil {
node.Right.Add(v)
} else {
node.Right = &TreeNode{v, nil, nil}
}
}
}
// 二叉树的实现
type Tree struct {
root *TreeNode //根节点
}
// 添加数据
func (self *Tree) Add(data int) {
self.root.Add(data)
}
// 前序遍历 根 ---> 左 --->右
func (self *Tree) preorderTraverse(node *TreeNode) {
if node == nil {
return
} else {
fmt.Print(node.Data, " ")
self.preorderTraverse(node.Left)
self.preorderTraverse(node.Right)
}
}
// 中序遍历 左 ---> 根 --->右
func (self *Tree) inorderTraverse(node *TreeNode) {
if node == nil {
return
} else {
self.inorderTraverse(node.Left)
fmt.Print(node.Data, " ")
self.inorderTraverse(node.Right)
}
}
// 后序遍历 左 ----> 右 ---> 根
func (self *Tree) postTraverse(node *TreeNode) {
if node == nil {
return
} else {
self.postTraverse(node.Left)
self.postTraverse(node.Right)
fmt.Print(node.Data, " ")
}
}
func main() {
tree := &Tree{}
root := &TreeNode{
Data: math.MinInt64,
}
tree.root = root
tree.Add(2)
tree.Add(50)
tree.Add(45)
tree.Add(40)
tree.Add(48)
tree.Add(51)
tree.Add(1)
tree.Add(61)
tree.Add(71)
fmt.Println("前序遍历")
tree.preorderTraverse(tree.root)
fmt.Println("")
fmt.Println("中序遍历")
tree.inorderTraverse(tree.root)
fmt.Println("")
fmt.Println("后续遍历")
tree.postTraverse(tree.root)
}