python 二叉樹排序

原理解析:
有一組數據“3, 5 , 7, 20, 43, 2, 15, 30”,則二叉樹的建立過程如下。

  1. 將3視爲根節點。
  2. 5>3,把5作爲3的右節點
  3. 7>3,7>5,把7作爲5的右節點
  4. 2<3作爲3的左節點。結果如下圖:
    在這裏插入圖片描述

代碼實現:

class BTree():                  #二叉樹節點

    def __init__(self,value):   #初始化子函數
        self.left  = None       #左節點
        self.date  = 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.date)

def inorder(node):               #中序遍歷,遍歷左子樹 (node爲根節點)
    if node.date:
        if node.left:
            inorder(node.left)
        node.show()
        if node.right:
            inorder(node.right)

def rinorder(node):               #中序遍歷,遍歷右子樹
    if node.date:
        if node.right:
            inorder(node.right)
        node.show()
        if node.left:
            inorder(node.left)

def insert(node,value):
    if value >node.date:
        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__':
    list = [10,3,22,52,11,9,2]
    Root = BTree(list[0])
    node = Root
    for i in range(1,len(list)):
        insert(Root,list[i])

    print('從小到大')
    inorder(Root)
    print('從大到小')
    rinorder(Root)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章