二叉樹簡介和存儲(chǔ)結(jié)構(gòu)

二叉樹的定義

一個(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容