GO语言实现二叉树
二叉树还不了解的可以点击树、二叉树、二叉查找树(二叉搜索树)
import(
"fmt"
"math/rand"
"time"
)
const (
rangeNum = 100
)
//树结构体
type tree struct{
value interface{}
left, right *tree
}
var arr []int
func main(){
//随机生成长度为10 切片
randsend := rand.New(rand.NewSource(time.Now().Unix()+time.Now().UnixNano()))
var defaultList []int
for i:=0;i<10;i++{
defaultList = append(defaultList,randsend.Intn(rangeNum))
}
fmt.Println(defaultList)//打印生成切片
t := creatTreeNode(defaultList)
t1 := search(t,defaultList[4])//查找
fmt.Println(t1)
//前序遍历
t.PreOrder()
//中序遍历
//t.MidOrder()
//后序遍历
//t.PostOrder()
fmt.Println(arr)
}
func creatTreeNode(i []int)*tree{
var t *tree
for _,v := range i{
t = insert(t,v)
}
return t
}
//插入
func insert(t *tree,v int)*tree{
if t == nil{
t = new(tree)
t.value = v
}else{
if v > t.value.(int){
t.right = insert(t.right,v)
}else{
t.left = insert(t.left,v)
}
}
return t
}
//查找
func search(t *tree,v int)*tree{
if t == nil{
fmt.Println("no")
return t
}
for{
if v > t.value.(int){
t = t.right
}else if v < t.value.(int){
t = t.left
}else{
return t
}
}
}
//前序遍历(根>左>右)
func (t *tree)PreOrder(){
if t == nil{
return
}
arr = append(arr,t.value.(int))
t.left.PreOrder()
t.right.PreOrder()
}
//中序遍历(左>根>右)
func (t *tree)MidOrder(){
if t == nil{
return
}
t.left.MidOrder()
arr = append(arr,t.value.(int))
t.right.MidOrder()
}
//后序遍历(左>右>根)
func (t *tree)PostOrder(){
if t == nil{
return
}
t.left.PostOrder()
t.right.PostOrder()
arr = append(arr,t.value.(int))
}
打印前序示例
[Running] go run “c:\goworks\src\coin\main.go”
[15 33 20 84 74 21 77 14 47 58]
&{74 0xc00005e5a0 0xc00005e560}
[15 14 33 20 21 84 74 47 58 77]