利用二叉树实现排序Go&Python

利用二叉树实现排序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)

posted @ 2019-08-30 15:33  村口王铁匠  阅读(247)  评论(0)    收藏  举报