二叉查詢樹的Python實現
阿新 • • 發佈:2019-01-07
二叉查詢樹,即左孩子小於根節點,右孩子大於根節點。
對於每一次新的節點插入操作,依據這個規則進行插入,最終使得樹的最右端為最大值,最左端為最小值。
由於二叉查詢樹是進入AVL平衡二叉樹的學習的前提,因此先進行這個的實現。
可以通過對節點的info屬性進行賦值,以作查詢驗證,直接執行也可以
# -*- coding: utf-8 -*- """ Created on Tue Dec 4 14:00:52 2018 Description:二叉查詢樹的實現 @author: HJY """ #二叉樹節點類定義 class Node(): def __init__(self,item): self.right = None self.left = None self.item = item self.info = None ###################################################################### #Function:insert #Author:HJY #Description:向二叉搜尋樹中插入新的節點 #input: # rNode:樹的根節點 # insertNum:需要插入的值 #Return: ##################################################################### def insert(rNode,insertNum): if rNode.item < insertNum: if rNode.right != None: insert(rNode.right,insertNum) else: rNode.right = Node(insertNum) else: if rNode.left != None: insert(rNode.left,insertNum) else: rNode.left = Node(insertNum) ###################################################################### #Function:create #Author:HJY #Description:根據列表建立二叉搜尋樹 #input: # base:列表 #Return: 返回生成的樹的根節點 ##################################################################### def create(base): root = Node(base[0]) for i in range(1,len(base)): insert(root,base[i]) return root ###################################################################### #Function:query #Author:HJY #Description:根據輸入的值查詢 #input: # root:樹的根節點 # find:查詢的值 #Return: 查詢到的節點引用 ##################################################################### def query(root,find): if root.item is find: print("the result has been found!") return root elif root.item < find: if root.right != None: return query(root.right,find) else: print("can't found!") return else: if root.left != None: return query(root.left,find) else: print("can't found!") return ###################################################################### #Function:get_max #Author:HJY #Description:查詢最大值 #input: # root:樹的根節點 #Return: 返回最大值引用 ##################################################################### def get_max(root): if root.right: return get_max(root.right) else: return root ###################################################################### #Function:get_min #Author:HJY #Description:查詢最小值 #input: # root:樹的根節點 #Return: 返回最小值引用 ##################################################################### def get_min(root): if root.left: return get_min(root.left) else: return root if __name__ == '__main__': base = [10,5,7,9,19,11,29,72,63,32,199,9,1] a = create(base) op = query(a,19) print('result:',op.info) maxNum = get_max(a) minNum = get_min(a) print('當前最大值:',maxNum.item) print('當前最小值:',minNum.item) ''' 為什麼返回值是空呢? 遞迴呼叫的返回值問題 '''