利用二叉树实现排序Go&Python
golang实现
package main
import (
"fmt"
)
type tree struct {
val int
left, right *tree
}
func Sort(nums []int) {
var root *tree
for _, v := range nums {
root = binTree(root, v)
}
appendToNew(root, nums[:0])
}
func binTree(root *tree, v int) *tree{
if root == nil {
root = new(tree)
root.val = v
return root
}
if v < root.val {
root.left = binTree(root.left, v)
} else {
root.right = binTree(root.right, v)
}
return root
}
func appendToNew(root *tree, nums []int) []int {
if root != nil {
nums = appendToNew(root.left, nums)
nums = append(nums, root.val)
nums = appendToNew(root.right, nums)
}
return nums
}
func main() {
nums := []int{7, 1, 4, 8, 9, 2, 0, 8}
Sort(nums)
fmt.Println(nums)
}
python实现
class Tree(object):
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
def Sort(nums):
root = Tree(None)
for i in nums:
add_tree(root, i)
li = []
appendToNew(root, li)
return li
def add_tree(root, node):
if root is None:
tree = Tree(node)
return tree
if root.val is None:
root.val = node
return root
if node < root.val:
root.left = add_tree(root.left, node)
else:
root.right = add_tree(root.right, node)
return root
def appendToNew(root, res):
if root is not None:
appendToNew(root.left, res)
res.append(root.val)
appendToNew(root.right, res)
if __name__ == '__main__':
nums = [3, 1, 9, 8, 5, 6, 7, 4, 8, 0, 2]
res = Sort(nums)
print(res)