python實(shí)現(xiàn)二叉排序樹(shù)
方法一(粗暴)
#二叉排序樹(shù) class BTree(): ? ? def __init__(self,data): ? ? ? ? self.left = None ? ? ? ? self.right = None ? ? ? ? if type(data) == list: ? ? ? ? ? ? self.data = data[0] ? ? ? ? ? ? for d in data[1:]: ? ? ? ? ? ? ? ? self.insert(d) ? ? ? ? else: ? ? ? ? ? ? self.data = data ? ? def insert(self,data): ? ? ? ? bt = self ? ? ? ? while True: ? ? ? ? ? ? if data <= bt.data: ? ? ? ? ? ? ? ? if bt.left == None: ? ? ? ? ? ? ? ? ? ? bt.left = BTree(data) ? ? ? ? ? ? ? ? ? ? break ? ? ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? ? ? bt = bt.left ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? if bt.right == None: ? ? ? ? ? ? ? ? ? ? bt.right = BTree(data) ? ? ? ? ? ? ? ? ? ? break ? ? ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? ? ? bt = bt.right ? ? def mid_order(self): ? ? ? ? res = [] ? ? ? ? stack = [] ? ? ? ? node = self? ? ? ? ? while node or stack: ? ? ? ? ? ? while node: ? ? ? ? ? ? ? ? stack.append(node)? ? ? ? ? ? ? ? ? node = node.left ? ? ? ? ? ? node = stack.pop() ? ? ? ? ? ? res.append(node.data) ? ? ? ? ? ? node = node.right ? ? ? ? return res data = [5,1,2,3,6,8,9] bt = BTree(data) print(bt.mid_order())

方法二(遞歸)
class TreeNode(object): ? ? def __init__(self,data): ? ? ? ? self.data = data ? ? ? ? self.left = None ? ? ? ? self.right = None class BinaryTree(object): ? ? def insert(self,root, node): ? ? ? ? if root is None: ? ? ? ? ? ? return node ? ? ? ? if node.data < root.data: ? ? ? ? ? ? root.left = self.insert(root.left, node) ? ? ? ? else: ? ? ? ? ? ? root.right = self.insert(root.right, node) ? ? ? ? return root ? ? def mid_order(self,root): ? ? ? ? node = root ? ? ? ? stack = [] ? ? ? ? res = [] ? ? ? ? while node or stack: ? ? ? ? ? ? while node: ? ? ? ? ? ? ? ? stack.append(node) ? ? ? ? ? ? ? ? node = node.left ? ? ? ? ? ? node = stack.pop() ? ? ? ? ? ? res.append(node.data) ? ? ? ? ? ? node = node.right ? ? ? ? return res ? ?? data = [5,1,2,3,6,8,9] root = TreeNode(data[0]) tree = BinaryTree() for i in data[1:]: ? ? tree.insert(root,TreeNode(i)) print(tree.mid_order(root))

到此這篇關(guān)于python實(shí)現(xiàn)二叉排序樹(shù)的文章就介紹到這了,更多相關(guān)python二叉排序樹(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python RobotFramework的安裝過(guò)程及應(yīng)用實(shí)戰(zhàn)教程
這篇文章主要介紹了RobotFramework的安裝過(guò)程及應(yīng)用實(shí)戰(zhàn)教程,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08
Python 語(yǔ)法錯(cuò)誤:"SyntaxError: invalid charac
本文給大家分享Python 語(yǔ)法錯(cuò)誤:“SyntaxError: invalid character in identifier“,原因及解決方法,文末給大家補(bǔ)充介紹了Python出現(xiàn)SyntaxError: invalid syntax的原因總結(jié),感興趣的朋友跟隨小編一起學(xué)習(xí)吧2023-02-02
Pycharm搭建一個(gè)Django項(xiàng)目的方法步驟
本文主要介紹了Pycharm搭建一個(gè)Django項(xiàng)目的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
關(guān)于Python的pymouse click 雙擊的問(wèn)題
這篇文章主要介紹了關(guān)于Python的pymouse click 雙擊的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
網(wǎng)紅編程語(yǔ)言Python將納入高考你怎么看?
12月編程語(yǔ)言排行榜出爐,在編程排行榜上,排名第四的是Python。而網(wǎng)絡(luò)上也瘋傳,編程語(yǔ)言Python將納入高考,Python不虧是網(wǎng)紅的編程語(yǔ)言2018-06-06
Python函數(shù)any()和all()的用法及區(qū)別介紹
any函數(shù):any(x),只要x中有一個(gè)不為空,0,false就返回True,否則返回False。all(x)函數(shù)必須x中的所有元素均不為空,0,false才會(huì)返回True,否則返回False。接下來(lái)通過(guò)本文給大家介紹Python函數(shù)any()和all()的用法及區(qū)別介紹,需要的朋友參考下吧2018-09-09
使用Python測(cè)試Ping主機(jī)IP和某端口是否開(kāi)放的實(shí)例
今天小編就為大家分享一篇使用Python測(cè)試Ping主機(jī)IP和某端口是否開(kāi)放的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
python pygame實(shí)現(xiàn)滾動(dòng)橫版射擊游戲城市之戰(zhàn)
這篇文章主要為大家詳細(xì)介紹了python pygame實(shí)現(xiàn)滾動(dòng)橫版射擊游戲城市之戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
python中將兩組數(shù)據(jù)放在一起按照某一固定順序shuffle的實(shí)例
今天小編就為大家分享一篇python中將兩組數(shù)據(jù)放在一起按照某一固定順序shuffle的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07

