槓上數據結構 - 樹

線性與非線性

線性: 指的是元素之間是 “一對一” 的關係,比如只有唯一 一個"前驅"和唯一一個"後繼"。

非線性: 指的是元素之間是一對多的關係,比如 “樹” 中節點可能有多個孩子節點,“圖” 中可能有多個元素與之關聯。

樹是一種非線性的數據結構,是由 n (n >= 0)個節點組成的有限集合。如果 n = 0,則樹是空樹。除了根節點外,其餘節點被分成 M (M > 0) 個互不相交的集合 T1, T2, T3,……Tn, 其中每一個集合又是一棵結構和樹類似的子數,每棵子樹的根節點有且只有一個前驅,有 0 個或多個後繼。

[外鏈圖片轉存失敗(img-dbCXnvLV-1563282064967)(../../Downloads/樹結構.png)]

樹有關的基本概念:

  • 節點: 節點包含數據和指向其他節點的指針。
  • 根節點: 樹的第一個節點。
  • 節點的度: 該節點所擁有的子樹的個數。
  • 樹的度: 樹中所有節點的度的最大值稱爲該樹的度。
  • 葉子節點: 沒有子節點的節點,也稱終端節點。
  • 父子節點: 一個節點 father 指向另一個節點 child ,則 child 爲孩子節點, father 爲父節點。
  • **兄弟節點:**具有相同父節點的節點互爲兄弟節點。
  • 祖先節點: 從根節點開到該節點所經過的所有節點都是該節點的祖先。
  • 子孫節點: 以某節點爲根的子樹中任意一個節點都稱爲該節點的子孫節點。
  • 樹的高度: 樹中距離根節點最遠節點的路徑長度。

樹的存儲結構

  1. 雙親表示法
  2. 孩子表示法
  3. 孩子兄弟表示法

1. 雙親表示法

以一組地址連續的空間(數組)存儲樹的節點,同時在每個節點中,附設一個指示器指示其雙親節點在數組中的位置。

[外鏈圖片轉存失敗(img-FbAW1OIp-1563282064968)(../../Downloads/雙親表示法.png)]

[外鏈圖片轉存失敗(img-UibGSROG-1563282064969)(../../Downloads/樹的雙親表示圖.png)]

下標 data parent
0 A -1
1 B 0
2 C 0
3 D 0
4 E 1
5 F 2
6 G 3
7 H 3

二叉樹

二叉樹: 二叉樹的每個節點至多隻有二棵子樹,子樹有左右之分且順序不能顛倒,左的稱爲 左子樹,右邊的稱爲右子樹。

二叉樹特點

  • 每個節點至多有兩棵子樹,即二叉樹中不存在度大於2 的節點。

  • 二叉樹的子樹有左右之分,且子樹的次序不能顛倒。

  • 二叉樹第 i 層上的節點數目最多爲 2i1(i>=1)2^{i-1} (i>=1)

  • 深度爲 k 的二叉樹至多有 2k12^k - 1 個節點 (k >=1)

  • 包含 n 個節點的二叉樹的高度至少爲 log2(n+1)log2(n+1)

  • 在任意一個二叉樹中,若葉子節點的個數爲 n , 度爲 2 的節點的個數爲 m , 則 n= m +1

二叉樹的種類

(1) 斜樹

[外鏈圖片轉存失敗(img-LmFSmJkf-1563282064969)(../../Downloads/斜數.png)]

(2) 滿二叉樹

葉子節點都在同一層,並且除了葉子節點外的所有節點都有兩個子節點。

[外鏈圖片轉存失敗(img-WBOjNICR-1563282064970)(../../Downloads/滿二叉樹.png)]

(3) 完全二叉樹

對於一顆二叉樹,假設起深度爲 d (d > 1) , 除了第 d 層外的所有節點構成滿二叉樹,且第 d 層所有節點從左向右連續的緊密排列,這樣的二叉樹稱爲完全二叉樹。

[外鏈圖片轉存失敗(img-MfCGImVs-1563282064971)(../../Downloads/完全二叉樹.png)]

(4)平衡二叉樹

它是一顆空樹或 他的左右兩個子樹的高度差的絕對值不超過 1, 並且左右兩個子樹都是一顆平衡二叉樹,同時,平衡二叉樹必定是二叉搜索樹。

(5)二叉查找樹

若任意節點的左子樹不爲空,則左子樹上所有節點的值均小於它的根節點的值;

若任意節點的右子樹不爲空,則右子樹上所有節點的值均大於它的根節點的值;

任意節點的左,右子樹也分別爲 二叉查找樹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章