12 - 樹-基礎知識-二叉樹-徹底二叉樹-斜樹

[toc]數據結構

1 樹

        樹在數據結構中屬於一種非線性結構,每一個元素能夠有多個前驅和後繼,它有以下定義:
樹是n(n≥0)個元素的集合:spa

  • n = 0 時,成爲空樹
  • 樹只有一個特殊的沒有前驅的元素,稱爲數的根Root
  • 樹中除了根節點外,其他元素只能有一個前驅,能夠有零個或者多個後繼

遞歸定義:3d

  • 樹T是n(n≥0)個元素的集合。n = 0 時,成爲空樹
  • 有且只有一個特殊元素根,剩餘元素均可以被劃分爲m個互不相交的集合T1,T2,...,Tm,而每個集合都是樹,成爲T的子樹Subtree
  • 子樹也有本身的根

2 樹的概念

樹是一箇中很是抽象的概念,下面主要介紹樹中各類名詞的含義:code

名稱 含義
節點 數中的數據元素
數的度 樹內各節點的度的最大值
節點的度(degree) 節點擁有的子樹的數目成爲度,記做d(v)
葉子節點 節點的度數爲0,成爲葉子節點leaf、終端節點、末端節點
分支節點 節點度數不爲0,成爲非終端節點或分支節點
分支 節點之間的關係
內部節點 除根節點外的分支節點,固然也不包括葉子節點
孩子(兒子Child)節點 節點的子樹的根節點成爲該節點的孩子
雙親(父Parent)節點 一個節點是它各個樹的根節點的雙親
兄弟(Sibling)節點 具備相同雙親節點的節點
祖先節點 從根節點到該節點所經分支上全部的節點。
子孫節點 節點的全部子樹上的節點都成爲該節點的子孫。
節點的層次(Level) 根節點爲第一層,根的孩子爲第二層,依次類推記做(Lv)
樹的深度(高度Depth) 樹的層次的最大值
堂兄弟 雙親在同一層的節點
有序樹 結點的子樹是有順序的(兄弟有大小,有前後次序),不能交換
無序數 結點的子樹是無序的,能夠交換
路徑 樹中的k個節點n一、n二、...nk,知足ni是n(i+1)的雙親,成爲n1到nk的一條路徑。就是一條線串下來的,前一個都是後一個父(前驅)節點。
森林 m(m≥0)課不相交的樹的集合,對於節點而言,其子樹的集合就是森林。

shu

3 樹的特色

下面咱們來總結一下書的特色:blog

  1. 惟一的根
  2. 子樹不相交
  3. 除了根之外,每一個元素只能有一個前驅,能夠有零個或多個後繼
  4. 根節點沒有雙親節點(前驅),葉子節點沒有孩子節點(後繼)
  5. vi是vj的雙親,則L(vi) = L(vj) - 1 ,也就是說雙親比孩子節點的層次小1

堂兄弟的雙親是兄弟關係嗎?遞歸

  1. 堂兄弟定義是:雙親節點在同一層的節點
  2. 右圖G和J是堂兄弟,由於它們的雙親節點D和E在第三層,依然是堂兄弟
  3. 所以,堂兄弟的雙親不必定是兄弟關係

4 二叉樹

二叉樹是一種特別的數,它有以下特色:hash

  • 每一個節點最多2課子樹,即二叉樹不存在度數大於2的節點
  • 它是有序樹、左子樹、右子樹是順序的,不能交換次序
  • 即便某一個節點只有一顆子樹,也要肯定它是左子樹仍是右子樹

二叉樹的五種基本形態:table

  1. 空二叉樹
  2. 只有一個根節點
  3. 根節點只有左子樹
  4. 根節點只有右子樹
  5. 根節點有左子樹和右子樹

4.1 斜樹

分爲左斜樹和右斜樹:二叉樹

  • 左斜樹:全部節點都只有左子樹
  • 右斜樹:全部節點都只有右子樹

xieshu

4.2 滿二叉樹

滿二叉樹有以下特色:終端

  1. 一課二叉樹的全部分支結構都存在左子樹和右子樹,而且全部葉子節點只存在在最下面一層。
  2. 一樣深度二叉樹中,滿二叉樹的節點最多
  3. K爲深度(1≤k≤n),則節點總數爲2^k - 1
  4. 下面是一個深度爲4的15個節點的滿二叉樹

manerchashu

4.3 徹底二叉樹

徹底二叉樹的特色:

  1. 若二叉樹的深度爲k,二叉樹的層數從1到k-1層的節點數都達到了最大個數,在第k層的全部節點都集中在最左邊,這就是徹底二叉樹
  2. 徹底二叉數由滿二叉樹引出
  3. 滿二叉樹必定是徹底二叉樹,但徹底二叉樹不是滿二叉樹
  4. k爲深度(1≤k≤n),則節點總數的最大值爲2^k - 1,當達到最大值的時候就是滿二叉樹
  5. 下面是一個深度爲4的徹底二叉樹

wanquanerchashu
wanquanerchashu

注意:徹底二叉樹K層節點都靠左排列,不然不能稱爲徹底二叉樹

4.4 二叉樹的性質

下面列舉一些二叉樹的特性,

4.4.1 性質1

在二叉樹的第i層上至多有2^(i-1)個節點(i≥1)
xingzhi1

以上圖爲例當i等於4時,那麼第4層最多含有2^(4-1),也就是8個元素

4.4.2 性質2

深度爲k的二叉樹,至多有2^k - 1 個節點(k≥1)

4.4.3 性質3

對任何一顆二叉樹T,若是其終端節點爲n0,度數爲2的節點爲n2,則有n0 = n2 + 1。換一句話說,就是葉子節點數-1就等於度數爲2的節點數
證實:

  1. 總結點數爲n=n0+n1+n2,n1是度數爲1的節點總數。
  2. 一棵樹的分支節點爲n-1,由於除了根節點外,其他節點都有一個分支,即n0+n1+n2-1
  3. 分支數還等於n00+n11+n22,n2是2分支節點因此乘以2,2m2+n1
  4. 可得2*n2+n1=N0+n1+n2-1 ==> n2=n0-1

4.4.4 性質4

具備n個節點的徹底二叉樹的深度爲int(log2n) + 1 或者math.ceil(log2(n+1))

4.4.5 性質5

若是有一顆n個節點的徹底二叉樹(深度爲性質4)

xingzhi4

  • 若是i=1,則節點i是二叉樹的根,無雙親;若是i>1,則其雙親是int(i/2),向下取整。就是子節點的編號整出2獲得的就是父結點的編號。父節點若是是i,那麼左孩子爲2i,右孩子節點就是2i+1。
  • 若是2i>n,則節點i無左孩子,即節點i爲葉子節點;不然其左孩子節點存在編號爲2i。
  • 若是2i+1>n,則節點i無右孩子,注意這裏並不能說明節點i沒有左孩子;不然右孩子節點存在編號爲2i+1.

4.4.6 其餘性質

  1. 高度爲k的二叉樹,至少有k個節點。
  2. 含有n(n≥1)的節點的二叉樹高度至多爲n。
  3. 含有n(n≥1)的節點的二叉樹的高度至多爲n,最小爲math(log2(n+1)),不小於對整數值的最小整數,向上取整。
  4. 假設告訴爲h, 2^h-1=n ==> h=log2(n+1),層數是取整。若是是8個節點,3.1699就要向上取整爲4,即4層
相關文章
相關標籤/搜索