Python實(shí)現(xiàn)二叉搜索樹BST的方法示例
二叉排序樹(BST)又稱二叉查找樹、二叉搜索樹
二叉排序樹(Binary Sort Tree)又稱二叉查找樹。它或者是一棵空樹;或者是具有下列性質(zhì)的二叉樹:
1.若左子樹不空,則左子樹上所有結(jié)點(diǎn)的值均小于根結(jié)點(diǎn)的值;
2.若右子樹不空,則右子樹上所有結(jié)點(diǎn)的值均大于根節(jié)點(diǎn)的值;
3.左、右子樹也分別為二叉排序樹。
- 求樹深度
- 按序輸出節(jié)點(diǎn)值(使用中序遍歷)
- 查詢二叉搜索樹中一個(gè)具有給點(diǎn)關(guān)鍵字的結(jié)點(diǎn),返回該節(jié)點(diǎn)的位置。時(shí)間復(fù)雜度是O(h),h是樹的高度。
- 遞歸/迭代求最大關(guān)鍵字元素
- 遞歸/迭代求最小關(guān)鍵字元素
# -*- coding:utf-8 -*- ''' 用Python實(shí)現(xiàn)二叉搜索樹。 ''' class Node(): def __init__(self, x): self.val = x self.left = None self.right = None #求樹的深度 def depth(root): if root is None: return 0 else: return 1 + max(depth(root.left), depth(root.right)) #按序輸出結(jié)點(diǎn)值(中序遍歷) def input_in_order(root): if root is None: return input_in_order(root.left) print(root.val) input_in_order(root.right) #(遞歸實(shí)現(xiàn) 、迭代實(shí)現(xiàn))查詢二叉搜索樹中一個(gè)具有給點(diǎn)關(guān)鍵字的結(jié)點(diǎn),返回該節(jié)點(diǎn)的位置。時(shí)間復(fù)雜度是O(h),h是樹的高度。 #遞歸實(shí)現(xiàn) def search1(root, value): if root is None or root.val == value: return root if root.val > value: return search1(root.left, value) if root.val < value: return search1(root.right, value) #迭代實(shí)現(xiàn) def search2(root, value): while root != None and root.val != value: if root.val > value: root = root.left elif root.val < value: root = root.right return root #求最大關(guān)鍵字元素 #迭代實(shí)現(xiàn) def max_value1(root): while root != None and root.left != None: root = root.right if root is None: return root else: return root.val #遞歸實(shí)現(xiàn) def max_value2(root): if root == None: return root elif root.right == None: return root.val else: return max_value2(root.right) #求最小關(guān)鍵字元素 #遞歸實(shí)現(xiàn) def min_value1(root): if root is None: return root elif root.left is None: return root.val else: return min_value1(root.left) #迭代實(shí)現(xiàn) def min_value2(root): if root is None: return root while root.left !=None: root = root.left return root.val if __name__ == '__main__': a = Node(15) b = Node(6) c = Node(18) d = Node(4) e = Node(8) f = Node(17) g = Node(20) h = Node(13) i = Node(9) a.left = b a.right = c b.left = d b.right = e c.left = f c.right = g e.right = h h.left = i print(search1(a, 13)) print(search2(a,13)) print(max_value1(a)) print(max_value2(a)) print(min_value1(a)) print(min_value2(a))
ps:從二叉查找樹BST中查找元素X,返回其所在結(jié)點(diǎn)的地址,查找的次數(shù)取決于樹的高度。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用Python實(shí)現(xiàn)橋接模式的代碼詳解
橋接模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,它將抽象部分與其實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化,本文將給大家介紹如何使用Python實(shí)現(xiàn)橋接模式,需要的朋友可以參考下2024-02-0250行Python代碼實(shí)現(xiàn)人臉檢測(cè)功能
現(xiàn)在的人臉識(shí)別技術(shù)已經(jīng)得到了非常廣泛的應(yīng)用,支付領(lǐng)域、身份驗(yàn)證、美顏相機(jī)里都有它的應(yīng)用。下面小編給大家?guī)?lái)了基于50行Python代碼實(shí)現(xiàn)人臉檢測(cè)功能,一起看看吧2018-01-01Python實(shí)現(xiàn)微信小程序自動(dòng)操作工具
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)微信小程序自動(dòng)化操作的小工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-01-01