python數(shù)據(jù)結(jié)構(gòu)樹和二叉樹簡(jiǎn)介
一、樹的定義
樹形結(jié)構(gòu)是一類重要的非線性結(jié)構(gòu)。樹形結(jié)構(gòu)是結(jié)點(diǎn)之間有分支,并具有層次關(guān)系的結(jié)構(gòu)。它非常類似于自然界中的樹。
樹的遞歸定義:
樹(Tree)是n(n≥0)個(gè)結(jié)點(diǎn)的有限集T,T為空時(shí)稱為空樹,否則它滿足如下兩個(gè)條件:
(1)有且僅有一個(gè)特定的稱為根(Root)的結(jié)點(diǎn);
(2)其余的結(jié)點(diǎn)可分為m(m≥0)個(gè)互不相交的子集Tl,T2,…,Tm,其中每個(gè)子集本身又是一棵樹,并稱其為根的子樹(Subree)。
二、二叉樹的定義
二叉樹是由n(n≥0)個(gè)結(jié)點(diǎn)組成的有限集合、每個(gè)結(jié)點(diǎn)最多有兩個(gè)子樹的有序樹。它或者是空集,或者是由一個(gè)根和稱為左、右子樹的兩個(gè)不相交的二叉樹組成。
特點(diǎn):
(1)二叉樹是有序樹,即使只有一個(gè)子樹,也必須區(qū)分左、右子樹;
(2)二叉樹的每個(gè)結(jié)點(diǎn)的度不能大于2,只能取0、1、2三者之一;
(3)二叉樹中所有結(jié)點(diǎn)的形態(tài)有5種:空結(jié)點(diǎn)、無左右子樹的結(jié)點(diǎn)、只有左子樹的結(jié)點(diǎn)、只有右子樹的結(jié)點(diǎn)和具有左右子樹的結(jié)點(diǎn)。
三、二叉樹的性質(zhì)
性質(zhì)1:二叉樹的第i層上最多有個(gè)結(jié)點(diǎn)。
性質(zhì)2:深度為h的二叉樹上最多有-1個(gè)結(jié)點(diǎn)。
性質(zhì)3:具有n個(gè)結(jié)點(diǎn)的二叉樹的高度不小于的最大整數(shù)。
性質(zhì)4:任意一棵二叉樹中,如果葉子結(jié)點(diǎn)的個(gè)數(shù)為n0,度為2的結(jié)點(diǎn)的個(gè)數(shù)為n2,則必然有n0=n2+1。
滿二叉樹:若深度為h的二叉樹,恰好具有-1個(gè)結(jié)點(diǎn),則稱為滿二叉樹。
完全二叉樹:若一棵具有n個(gè)結(jié)點(diǎn)的二叉樹的邏輯結(jié)構(gòu)與滿二叉樹的前n個(gè)結(jié)點(diǎn)的邏輯結(jié)構(gòu)完全相同,則稱該二叉樹為完全二叉樹
擴(kuò)充二叉樹:除葉子結(jié)點(diǎn)外,其余結(jié)點(diǎn)都必須有兩個(gè)孩子的二叉樹。
四、二叉樹的存儲(chǔ)結(jié)構(gòu)
二叉樹的存儲(chǔ)結(jié)構(gòu)有順序存儲(chǔ)結(jié)構(gòu)、鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)
順序存儲(chǔ):結(jié)構(gòu)采用一維數(shù)組存儲(chǔ)的。根據(jù)二叉樹的性質(zhì)6可計(jì)算出雙親結(jié)點(diǎn)、左右孩子結(jié)點(diǎn)的下標(biāo)。因此滿二叉樹、完全二叉樹的存儲(chǔ)可采用一維數(shù)組,把結(jié)點(diǎn)按從上到下、從左到右的順序存放在數(shù)組中,結(jié)點(diǎn)之間的關(guān)系可由性質(zhì)6的公式計(jì)算得到。
鏈?zhǔn)酱鎯?chǔ):結(jié)構(gòu)采用鏈表存儲(chǔ)二叉樹中的數(shù)據(jù)元素,用鏈建立二叉樹中結(jié)點(diǎn)之間的關(guān)系。二叉樹最常用的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)是二叉鏈,每個(gè)結(jié)點(diǎn)包含三個(gè)域,分別是數(shù)據(jù)元素域data、左孩子鏈域lChild和右孩子鏈域rChild。與單鏈表帶頭結(jié)點(diǎn)和不帶頭結(jié)點(diǎn)的兩種情況相似,二叉鏈存儲(chǔ)結(jié)構(gòu)的二叉樹也有帶頭結(jié)點(diǎn)和不帶頭結(jié)點(diǎn)兩種
五、二叉樹的操作
python數(shù)據(jù)結(jié)構(gòu)之二叉樹的建立實(shí)例
python數(shù)據(jù)結(jié)構(gòu)之二叉樹的遍歷實(shí)例
python數(shù)據(jù)結(jié)構(gòu)之二叉樹的統(tǒng)計(jì)與轉(zhuǎn)換實(shí)例
- Python數(shù)據(jù)結(jié)構(gòu)與算法之字典樹實(shí)現(xiàn)方法示例
- Python數(shù)據(jù)結(jié)構(gòu)與算法之完全樹與最小堆實(shí)例
- Python數(shù)據(jù)結(jié)構(gòu)與算法之二叉樹結(jié)構(gòu)定義與遍歷方法詳解
- python數(shù)據(jù)結(jié)構(gòu)之二叉樹的統(tǒng)計(jì)與轉(zhuǎn)換實(shí)例
- python數(shù)據(jù)結(jié)構(gòu)之二叉樹的遍歷實(shí)例
- python數(shù)據(jù)結(jié)構(gòu)之二叉樹的建立實(shí)例
- Python數(shù)據(jù)結(jié)構(gòu)樹與算法分析
相關(guān)文章
python線程鎖(thread)學(xué)習(xí)示例
python thread提供了低級(jí)別的、原始的線程以及一個(gè)簡(jiǎn)單的鎖,下面提供一個(gè)python線程線程鎖(thread)學(xué)習(xí)示例,大家參考使用2013-12-12python里讀寫excel等數(shù)據(jù)文件的6種常用方式(小結(jié))
這篇文章主要介紹了python里讀寫excel等數(shù)據(jù)文件的6種常用方式(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04python基于雙向鏈表實(shí)現(xiàn)LFU算法
這篇文章主要為大家詳細(xì)介紹了python基于雙向鏈表實(shí)現(xiàn)LFU算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05淺談python中np.array的shape( ,)與( ,1)的區(qū)別
今天小編就為大家分享一篇python中np.array的shape ( ,)與( ,1)的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06使用Python Typing模塊提升代碼可讀性和健壯性實(shí)例探索
這篇文章主要為大家介紹了使用Python Typing模塊提升代碼可讀性和健壯性實(shí)例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Python數(shù)據(jù)結(jié)構(gòu)與算法中的棧詳解(3)
這篇文章主要為大家詳細(xì)介紹了Python中的棧,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03python編寫簡(jiǎn)易聊天室實(shí)現(xiàn)局域網(wǎng)內(nèi)聊天功能
這篇文章主要為大家詳細(xì)介紹了python編寫簡(jiǎn)易聊天室實(shí)現(xiàn)局域網(wǎng)內(nèi)聊天功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07