一个命名为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语言圣经》