一个命名为S的结构体类型将不能再包含S类型的成员:因为一个聚合的值不能包含它自身。但是S类型的结构体可以包含*S指针类型的成员,这可以让我们创建递归的数据结构
func main() {
fmt.Println(Sort([]int{11,2,5,30,100,10,1,70}))
}
type tree struct {
value int
left,right *tree
}
func Sort(values []int) []int{
var root *tree
for _,v := range values {
root = add(root,v)
}
return appendValues(values[:0],root)
}
func appendValues(values []int, t *tree) []int {
if t != nil {
values = appendValues(values,t.left)
values = append(values,t.value)
values = appendValues(values,t.right)
}
return values
}
func add(t *tree, value int) *tree{
if t == nil {
t = new(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
}
ps:代码摘至《Go语言圣经》
本文介绍了一种使用Go语言实现的排序算法,通过构建一个递归数据结构——二叉搜索树来完成对整数切片的排序。该算法首先将所有元素插入到二叉搜索树中,然后通过中序遍历的方式收集已排序的元素。
865

被折叠的 条评论
为什么被折叠?



