golang使用二叉树实现排序

来源:互联网 发布:app inventor小软件 编辑:程序博客网 时间:2024/06/07 06:31

一个命名为S的结构体类型将不能再包含S类型的成员:因为一个聚合的值不能包含它自身。但是S类型的结构体可以包含*S指针类型的成员,这可以让我们创建递归的数据结构


func main() {fmt.Println(Sort([]int{11,2,5,30,100,10,1,70}))}type tree struct {value intleft,right *tree}func Sort(values []int) []int{var root *treefor _,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 = valuereturn t}if value < t.value {t.left = add(t.left,value)}else {t.right = add(t.right,value)}return t}


ps:代码摘至《Go语言圣经》