package main
//利用二叉树实现插入排序
import "fmt"
type tree struct {
value int
left, right *tree
}
//Sort 排序
func Sort(values []int) {
var root *tree
for _, v := range values {
root = add(root, v) //将切片中的数值植入root中
}
appendValue(values[:0], root)
}
//通过root的数据来重新拼接slice
func appendValue(values []int, t *tree) []int {
if t != nil {
values = appendValue(values, t.left)
values = append(values, t.value)
values = appendValue(values, t.right)
}
return values
}
func add(t *tree, value int) *tree {
if t == nil { //第一层(中间层)或者树的末端
t = new(tree) //new(tree) 返回的是一个*tree 是一个地址
t.value = value
return t
}
if value < t.value {
t.left = add(t.left, value) //比树根小,往左边下移
} else {
t.right = add(t.right, value) //比树根大,往右边下移
}
return t
}
func main() {
x := []int{5, 7, 1, 6, 9, 8, 2, 4, 3}
Sort(x[:])
fmt.Println(x)
}
golang 利用二叉树实现插入排序
最新推荐文章于 2021-09-04 11:56:30 发布