python實(shí)現(xiàn)二叉查找樹實(shí)例代碼
本文研究的主要是python實(shí)現(xiàn)二叉查找樹的相關(guān)內(nèi)容,具體介紹及實(shí)現(xiàn)如下。
1. 二叉查找樹的定義:
左子樹不為空的時(shí)候,左子樹的結(jié)點(diǎn)值小于根節(jié)點(diǎn),右子樹不為空時(shí),右子樹的結(jié)點(diǎn)值大于根節(jié)點(diǎn),左右子樹分別為二叉查找樹
2. 二叉查找樹的最左邊的結(jié)點(diǎn)即為最小值,要查找最小值,只需遍歷左子樹的結(jié)點(diǎn)直到為空為止,同理,最右邊的結(jié)點(diǎn)結(jié)尾最大值,要查找最大值,只需遍歷右子樹的結(jié)點(diǎn)直到為空為止。二叉查找樹的插入查找和刪除都是通過遞歸的方式來實(shí)現(xiàn)的,刪除一個(gè)結(jié)點(diǎn)的時(shí)候,先找到這個(gè)結(jié)點(diǎn)S,如果這個(gè)結(jié)點(diǎn)左右孩子都不為空,這時(shí)并不是真正的刪除這個(gè)結(jié)點(diǎn)S,而是在其右子樹找到后繼結(jié)點(diǎn),將后繼結(jié)點(diǎn)的值付給S,然后刪除這個(gè)后繼結(jié)點(diǎn)即可。如果結(jié)點(diǎn)S的左孩子或者右孩子為空,可以直接刪除這個(gè)結(jié)點(diǎn)S。
3. 二叉查找樹的python實(shí)現(xiàn):
class TreeNode: def __init__(self,val): self.val=val; self.left=None; self.right=None; def insert(root,val): if root is None: root=TreeNode(val); else: if val<root.val: root.left=insert(root.left,val); #遞歸地插入元素 elif val>root.val: root.right=insert(root.right,val); return root; def query(root,val): if root is None: return ; if root.val is val: return 1; if root.val <val: return query(root.right,val); #遞歸地查詢 else: return query(root.left,val); def findmin(root): if root.left: return findmin(root.left); else: return root; def delnum(root,val): if root is None: return ; if val<root.val: return delnum(root.left,val); elif val>root.val: return delnum(root.right,val); else: # 刪除要區(qū)分左右孩子是否為空的情況 if(root.left and root.right): tmp=finmin(root.right); #找到后繼結(jié)點(diǎn) root.val=tmp.val; root.right=delnum(root.right,val); #實(shí)際刪除的是這個(gè)后繼結(jié)點(diǎn) else: if root.left is None: root=root.right; elif root.right is None: root=root.left; return root; #測試代碼 root=TreeNode(3); root=insert(root,2); root=insert(root,1); root=insert(root,4); #print query(root,3); print query(root,1); root=delnum(root,1); print query(root,1);
結(jié)果:
1
None
>>>
總結(jié)
以上就是本文關(guān)于python實(shí)現(xiàn)二叉查找樹實(shí)例代碼的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
- Python實(shí)現(xiàn)查找二叉搜索樹第k大的節(jié)點(diǎn)功能示例
- Python中的二叉樹查找算法模塊使用指南
- python中二分查找法的實(shí)現(xiàn)方法
- python實(shí)現(xiàn)在列表中查找某個(gè)元素的下標(biāo)示例
- python實(shí)現(xiàn)二分查找算法
- Python腳本如何在bilibili中查找彈幕發(fā)送者
- Python如何實(shí)現(xiàn)的二分查找算法
- python和pywin32實(shí)現(xiàn)窗口查找、遍歷和點(diǎn)擊的示例代碼
- Python 實(shí)現(xiàn)二叉查找樹的示例代碼
相關(guān)文章
探索Python元類的魅力:靈活定制類的創(chuàng)建過程
在Python編程中,元類(Metaclass)是一項(xiàng)高級特性,它允許我們在定義類的時(shí)候動(dòng)態(tài)地控制類的創(chuàng)建過程。元類提供了一種強(qiáng)大的機(jī)制,可以對類進(jìn)行定制化,擴(kuò)展其功能,并在類的實(shí)例化過程中執(zhí)行額外的操作,本文將深入解析2023-10-10jenkins+python自動(dòng)化測試持續(xù)集成教程
這篇文章主要介紹了jenkins+python自動(dòng)化測試持續(xù)集成教程,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05python操作docx寫入內(nèi)容,并控制文本的字體顏色
今天小編就為大家分享一篇python操作docx寫入內(nèi)容,并控制文本的字體顏色,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02Python中map,reduce,filter和sorted函數(shù)的使用方法
這篇文章主要介紹了Python中map,reduce,filter和sorted函數(shù)的使用方法,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-08-08Python隨機(jī)生成數(shù)據(jù)后插入到PostgreSQL
本文主要介紹利用python的random庫生成隨機(jī)數(shù),然后插入到PostgreSQL數(shù)據(jù)庫中,有需要的可以參考學(xué)習(xí)。2016-07-07Windows10+anacond+GPU+pytorch安裝詳細(xì)過程
這篇文章主要介紹了Windows10+anacond+GPU+pytorch安裝詳細(xì)過程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03