線性與非線性
線性: 指的是元素之間是 “一對一” 的關係,比如只有唯一 一個"前驅"和唯一一個"後繼"。
非線性: 指的是元素之間是一對多的關係,比如 “樹” 中節點可能有多個孩子節點,“圖” 中可能有多個元素與之關聯。
樹
樹是一種非線性的數據結構,是由 n (n >= 0)個節點組成的有限集合。如果 n = 0,則樹是空樹。除了根節點外,其餘節點被分成 M (M > 0) 個互不相交的集合 T1, T2, T3,……Tn, 其中每一個集合又是一棵結構和樹類似的子數,每棵子樹的根節點有且只有一個前驅,有 0 個或多個後繼。
樹有關的基本概念:
- 節點: 節點包含數據和指向其他節點的指針。
- 根節點: 樹的第一個節點。
- 節點的度: 該節點所擁有的子樹的個數。
- 樹的度: 樹中所有節點的度的最大值稱爲該樹的度。
- 葉子節點: 沒有子節點的節點,也稱終端節點。
- 父子節點: 一個節點 father 指向另一個節點 child ,則 child 爲孩子節點, father 爲父節點。
- **兄弟節點:**具有相同父節點的節點互爲兄弟節點。
- 祖先節點: 從根節點開到該節點所經過的所有節點都是該節點的祖先。
- 子孫節點: 以某節點爲根的子樹中任意一個節點都稱爲該節點的子孫節點。
- 樹的高度: 樹中距離根節點最遠節點的路徑長度。
樹的存儲結構
- 雙親表示法
- 孩子表示法
- 孩子兄弟表示法
1. 雙親表示法
以一組地址連續的空間(數組)存儲樹的節點,同時在每個節點中,附設一個指示器指示其雙親節點在數組中的位置。
下標 | 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 層上的節點數目最多爲
-
深度爲 k 的二叉樹至多有 個節點 (k >=1)
-
包含 n 個節點的二叉樹的高度至少爲
-
在任意一個二叉樹中,若葉子節點的個數爲 n , 度爲 2 的節點的個數爲 m , 則 n= m +1
二叉樹的種類
(1) 斜樹
(2) 滿二叉樹
葉子節點都在同一層,並且除了葉子節點外的所有節點都有兩個子節點。
(3) 完全二叉樹
對於一顆二叉樹,假設起深度爲 d (d > 1) , 除了第 d 層外的所有節點構成滿二叉樹,且第 d 層所有節點從左向右連續的緊密排列,這樣的二叉樹稱爲完全二叉樹。
(4)平衡二叉樹
它是一顆空樹或 他的左右兩個子樹的高度差的絕對值不超過 1, 並且左右兩個子樹都是一顆平衡二叉樹,同時,平衡二叉樹必定是二叉搜索樹。
(5)二叉查找樹
若任意節點的左子樹不爲空,則左子樹上所有節點的值均小於它的根節點的值;
若任意節點的右子樹不爲空,則右子樹上所有節點的值均大於它的根節點的值;
任意節點的左,右子樹也分別爲 二叉查找樹。