這篇文章主要介紹了python怎么實(shí)現(xiàn)二叉查找樹,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

具體介紹及實(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)直到為空為止。二叉查找樹的插入查找和刪除都是通過(guò)遞歸的方式來(lái)實(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; #測(cè)試代碼 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
>>>
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“python怎么實(shí)現(xiàn)二叉查找樹”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司,關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、網(wǎng)站設(shè)計(jì)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
標(biāo)題名稱:python怎么實(shí)現(xiàn)二叉查找樹-創(chuàng)新互聯(lián)
文章鏈接:http://www.chinadenli.net/article0/docsoo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、軟件開發(fā)、網(wǎng)站收錄、全網(wǎng)營(yíng)銷推廣、Google、微信公眾號(hào)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容