数据结构基础:树结构的学习笔记
1、樹(shù)的定義
樹(shù)是n(n>=0)個(gè)節(jié)點(diǎn)的有限集合。當(dāng)n=0時(shí)稱(chēng)為空樹(shù),當(dāng)n>0 為非空樹(shù),任何非空樹(shù)中,有且僅有一個(gè)根節(jié)點(diǎn);其余節(jié)點(diǎn)可分為m(m>=0)個(gè)互不相交的有限集合T1、T2 等,其中每一個(gè)集合都可以稱(chēng)為一棵樹(shù),稱(chēng)為根節(jié)點(diǎn)的子樹(shù)。
2、樹(shù)的基本概念?
? ? ? ??雙親孩子、兄弟:節(jié)點(diǎn)的字?jǐn)?shù)的根稱(chēng)為該節(jié)點(diǎn)的孩子,該節(jié)點(diǎn)稱(chēng)為其子節(jié)點(diǎn)的雙親。具有相同雙親的節(jié)點(diǎn)互為兄弟節(jié)點(diǎn)。如圖:A是根節(jié)點(diǎn),B、C、D互為兄弟;B是E、F的父節(jié)點(diǎn)(雙親);E、F 互為兄弟節(jié)點(diǎn)。
節(jié)點(diǎn)的度:一個(gè)節(jié)點(diǎn)下的子節(jié)點(diǎn)個(gè)數(shù)稱(chēng)為節(jié)點(diǎn)的度。比如 A的度為3,D的度為1。
葉子節(jié)點(diǎn):是指度為0的節(jié)點(diǎn),也被稱(chēng)為終端節(jié)點(diǎn)。比如 C、E、F、G都是葉子節(jié)點(diǎn)。
內(nèi)部節(jié)點(diǎn):度不為零的節(jié)點(diǎn)稱(chēng)為分支節(jié)點(diǎn)或非終端節(jié)點(diǎn)。去掉根節(jié)點(diǎn),分支節(jié)點(diǎn)稱(chēng)為內(nèi)部節(jié)點(diǎn)。比如:B、D。
節(jié)點(diǎn)的層次:根節(jié)點(diǎn)A屬于第一層,依次類(lèi)推。B屬于第二層,E屬于第三層。
樹(shù)的高度:一棵樹(shù)的最大層次數(shù)稱(chēng)為樹(shù)的高度或者樹(shù)的深度。
有序(無(wú)序)樹(shù):樹(shù)中的節(jié)點(diǎn)的各個(gè)子樹(shù)看成是從左到右有次序的,即不能交換,則稱(chēng)為有序樹(shù),否則為無(wú)序樹(shù)。
森林:m(m>=0)棵互補(bǔ)相交的樹(shù)的集合。
3、二叉樹(shù)
3.1 二叉樹(shù)定義
二叉樹(shù)是n(n>=0)個(gè)節(jié)點(diǎn)的有限集合,它或者是空樹(shù)(n=0),或者是由一個(gè)根節(jié)點(diǎn)及兩棵不相交的、分別稱(chēng)為左子樹(shù)、右子樹(shù)的二叉樹(shù)所組成。
3.2 二叉樹(shù)和普通樹(shù)的區(qū)別
二叉樹(shù)中節(jié)點(diǎn)區(qū)分左子樹(shù)、右子樹(shù),即便只有一個(gè)子樹(shù)的情況下也有標(biāo)明是左子樹(shù)還是右子樹(shù),普通樹(shù)則不區(qū)分;二叉樹(shù)中節(jié)點(diǎn)最大度為2,普通樹(shù)則沒(méi)有限制節(jié)點(diǎn)的度數(shù)。
3.3 二叉樹(shù)的性質(zhì)
1、二叉樹(shù)第i層上最多有 ?2^(i-1)個(gè)節(jié)點(diǎn)
2、深度為k的二叉樹(shù)最多有(2^k)-1個(gè)節(jié)點(diǎn)
3、對(duì)任何一棵二叉樹(shù),若其終端節(jié)點(diǎn)數(shù)為n,度為2的節(jié)點(diǎn)數(shù)為n2,則n=n2+1
4、具有n個(gè)節(jié)點(diǎn)的完全二叉樹(shù)的深度為(log2^n)+1
3.4 二叉樹(shù)分類(lèi)
1、滿二叉樹(shù):深度為k的二叉樹(shù)有2^(k-1)個(gè)節(jié)點(diǎn),是滿二叉樹(shù)
2、完全二叉樹(shù):高度為k的二叉樹(shù),除了第k層都是滿的,稱(chēng)為完全二叉樹(shù)。滿二叉樹(shù)也是完全二叉樹(shù)。具有n個(gè)節(jié)點(diǎn)的完全二叉樹(shù)高度為 (log2^n) +1
3、非完全二叉樹(shù):不滿足完全二叉樹(shù)的稱(chēng)為非完全二叉樹(shù)。
3.5叉樹(shù)的存儲(chǔ)結(jié)構(gòu)
1、二叉樹(shù)的順序存儲(chǔ)結(jié)構(gòu)
用一組地址連續(xù)的存儲(chǔ)單元存儲(chǔ)二叉樹(shù)的節(jié)點(diǎn),必須把節(jié)點(diǎn)排成一個(gè)適當(dāng)?shù)木€性序列,并且節(jié)點(diǎn)在這個(gè)序列中的相互位置可以反映出節(jié)點(diǎn)之間的邏輯關(guān)系
順序存儲(chǔ)適合對(duì)完全二叉樹(shù)的存儲(chǔ)方式,既簡(jiǎn)單又節(jié)省空間。對(duì)于一般二叉樹(shù)而言,因?yàn)樵陧樞虼鎯?chǔ)結(jié)構(gòu)中,以節(jié)點(diǎn)在存儲(chǔ)單元中的位置來(lái)表示節(jié)點(diǎn)之間的關(guān)系,所以存儲(chǔ)方式也必須按照完全二叉樹(shù)的方式存儲(chǔ),這樣會(huì)造成空間上的浪費(fèi)。最壞的情況,一個(gè)深度為h且只有h個(gè)節(jié)點(diǎn)的二叉樹(shù)(也是單枝樹(shù))需要(2^h) -1 存儲(chǔ)單元.
2、二叉樹(shù)的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)
由于二叉樹(shù)中節(jié)點(diǎn)包含數(shù)據(jù)、左子樹(shù)根、右子樹(shù)根、雙親信息,因此可以用三叉鏈表或二叉鏈表來(lái) 存儲(chǔ)二叉樹(shù),鏈表的頭指針指向二叉樹(shù)的根節(jié)點(diǎn)。
3.6 ?二叉樹(shù)的遍歷
遍歷是按某種策略訪問(wèn)樹(shù)中的每個(gè)節(jié)點(diǎn),僅訪問(wèn)一次。對(duì)于含有n個(gè)節(jié)點(diǎn)的二叉樹(shù)遍歷算法的時(shí)間復(fù)雜度都是O(n).
3.7 ?哈夫曼樹(shù)(最優(yōu)二叉樹(shù))
節(jié)點(diǎn)的路徑:從樹(shù)的一個(gè)節(jié)點(diǎn)到另一個(gè)節(jié)點(diǎn)之前的通路。
該通路的分支數(shù)據(jù)稱(chēng)為路徑長(zhǎng)度。
節(jié)點(diǎn)的帶權(quán)路徑:節(jié)點(diǎn)到樹(shù)根之間的路徑長(zhǎng)度*該節(jié)點(diǎn)的權(quán)重值。
樹(shù)的帶權(quán)路徑長(zhǎng)度為樹(shù)種所有葉子節(jié)點(diǎn)的帶權(quán)路徑長(zhǎng)度之和。數(shù)值最小的就是哈夫曼樹(shù)。
IT技術(shù)分享社區(qū)
個(gè)人博客網(wǎng)站:https://programmerblog.xyz
文章推薦程序員效率:畫(huà)流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠(yuǎn)程辦公:常用的遠(yuǎn)程協(xié)助軟件,你都知道嗎?51單片機(jī)程序下載、ISP及串口基礎(chǔ)知識(shí)硬件:斷路器、接觸器、繼電器基礎(chǔ)知識(shí)
?
總結(jié)
以上是生活随笔為你收集整理的数据结构基础:树结构的学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python数据标准类型_Python的
- 下一篇: 数据结构基础:算法的基础知识笔记