二叉樹的定義
一個(gè)有窮節(jié)點(diǎn)的集合,這個(gè)集合可以為空,但如果不為空,則它是由根節(jié)點(diǎn)和稱為其左子樹和右子樹的兩個(gè)不想交的二叉樹組成。
特殊的二叉樹
- 斜二叉樹(實(shí)際上就是個(gè)鏈表)
- 完美二叉樹(滿二叉樹):除了葉節(jié)點(diǎn)的每個(gè)結(jié)點(diǎn)都有兩個(gè)子樹
- 完全二叉樹
有n個(gè)節(jié)點(diǎn)的二叉樹,對(duì)書中節(jié)點(diǎn)按從上到下、從左到右順序進(jìn)行編號(hào)編號(hào)為i的節(jié)點(diǎn)與滿二叉樹中編號(hào)為i的節(jié)點(diǎn)在二叉樹中位置相同
二叉樹的幾個(gè)重要性質(zhì)
-
一個(gè)二叉樹的第i層的最大節(jié)點(diǎn)數(shù)為:
-
深度為k的二叉樹有最大節(jié)點(diǎn)總數(shù)是:
- 若n0代表業(yè)績點(diǎn)的個(gè)數(shù),n2代表度為2的節(jié)點(diǎn)個(gè)數(shù),兩者滿足關(guān)系n0 = n2 + 1。證明如下:
邊的總數(shù) =
最后化簡就是上面的公式。
二叉樹的存儲(chǔ)結(jié)構(gòu)
1. 順序存儲(chǔ)結(jié)構(gòu):先把這顆樹補(bǔ)齊成完全二叉樹,然后按照從行到下,從左到右的順序來給一個(gè)樹編號(hào),編號(hào)就是數(shù)組的下標(biāo)。
按照這種存儲(chǔ)結(jié)構(gòu),如何找節(jié)點(diǎn)的父節(jié)點(diǎn)、左節(jié)點(diǎn)、右節(jié)點(diǎn)呢?
- 非根節(jié)點(diǎn)的父節(jié)點(diǎn)的序號(hào)是:i / 2
- 節(jié)點(diǎn)的左孩子節(jié)點(diǎn)的序號(hào)是 2 * i (如果2i <= n 則說明沒有左孩子)
- 節(jié)點(diǎn)的右孩子結(jié)點(diǎn)的序號(hào)是:2 * i +1(如果2i +1<= n 則說明沒有右孩子)
這種存儲(chǔ)結(jié)構(gòu)有什么缺點(diǎn)呢?
如果遇到這種樹則會(huì)在數(shù)組中出現(xiàn)很多空位,是以空間為代價(jià)的
2. 鏈表存儲(chǔ)結(jié)構(gòu)
如果用鏈表實(shí)現(xiàn)就很簡單了
我們定義一個(gè)結(jié)構(gòu),結(jié)構(gòu)里有兩個(gè)指針(引用),來指向左節(jié)點(diǎn),右節(jié)點(diǎn)。如果沒有的話就為null