python實現遞歸二叉樹排序

二叉樹排序簡介

二叉樹排序是比較有意思的一種排序方法,而且也便於操作。二叉樹的排序過程主要是二叉樹的建立和遍歷的過程。例如有一組數據"3,5,7,20,43,2,15,30",則二叉樹的建立過程如下:

  • 首先將第一個數據3放入根節點
  • 將數據5與根節點中的數據3比較,由5大於3,則將5放入3的右子樹中
  • 將數據7與根節點中的數據3比較,由於7大於3,則應將7放入3的右子樹中,由於3已經有右兒子5,則將7與5進行比較,因爲7大於5,應將7放入5的右子樹中
  • 將數據20與根節點3進行比較,由於20大於3,則應將20放入3的右子樹,重複比較,最終將20放到7的右子樹中;
  • 將數據43與樹中的節點值進行比較,最終將其放入20的右子樹中
  • 以此類推與比較…

下面用例子作爲真實效果模擬

例子:python用列表實現二叉樹排序

實驗效果:
在這裏插入圖片描述
實驗代碼:

# -*- coding:utf-8 -*-

class BTree:
    def __init__(self, value):
        self.left = None
        self.data = value
        self.right = None

    def insertLeft(self, value):
        self.left = BTree(value)
        return self.left

    def insertRight(self, value):
        self.right = BTree(value)
        return self.right

    def show(self):
        print(self.data)


def inorder(node):
    if node.data:
        if node.left:
            inorder(node.left)
        node.show()

        if node.right:
            inorder(node.right)


def insert(node, value):
    if value > node.data:
        if node.right:
            insert(node.right,value)
        else:
            node.insertRight(value)
    else:
        if node.left:
            insert(node.left, value)
        else:
            node.insertLeft(value)

if __name__ == '__main__':
    l = [3,5,7,20,43,2,15,30]
    Root = BTree(l[0])
    node = Root
    for i in range(1,len(l)):
        insert(Root,l[i])
    print('*************************')
    print(" 從小到大")
    print('*************************')
    inorder(Root)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章