GO语言实现二叉树

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]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值