使用递归方式实现二叉树,再通过二叉树的结构特点对切片进行排序。
func main() {
sli := []int{1, 3, 7, 2, 4, 8, 6, 0, 5, 9}
var tree *tree
for _, v := range sli {
tree = AddTree(tree, v)
}
sli2 := []int{}
sli2 = SortTree(tree, sli2)
fmt.Println(sli2)
}
//中序插入
func AddTree(t *tree, v int) *tree {
if t == nil {
t = new(tree)
t.data = v
} else if t.data < v {
t.rTree = AddTree(t.rTree, v)
} else {
t.lTree = AddTree(t.lTree, v)
}
return t
}
//中序遍历
func SortTree(tree *tree, result []int) []int {
if tree.lTree != nil {
result = SortTree(tree.lTree, result)
}
result = append(result, tree.data)
if tree.rTree != nil {
result = SortTree(tree.rTree, result)
}
return result
}
type tree struct {
data int
lTree, rTree *tree
}
当然了,排序还有很多种方法...二叉树使用场景多用在目录结构、爬虫爬取到的URL等...本例只为练习递归思维。