《数据结构》天勤和王道 第五章 树
《數據結構》天勤和王道 第五章 樹
- 天勤部分
- 1. 樹的基礎知識
- 1.1 結點的度
- 1.2 樹的度
- 1.3 葉子結點
- 1.4 雙親結點、孩子結點、祖先結點和子孫結點
- 1.5 兄弟結點和堂兄弟結點
- 1.6 高度和深度
- 1.7 存儲結構
- 2. 二叉樹的邏輯結構和存儲結構
- 2.1 性質
- 2.2 葉子結點數=雙分支結點數+1的靈活運用
- 2.3 m叉樹的性質
- 王道部分
- 1. 樹的定義和基本術語
- 2. 樹的常考性質
- 3. 二叉樹的定義和基本術語
- 3.1 滿二叉樹和完全二叉樹
- 3.2 二叉排序樹
- 3.3 平衡二叉樹
- 4. 二叉樹的性質
- 4.1 二叉樹的常考性質
- 4.2 完全二叉樹的常考性質
- 5. 二叉樹的存儲結構
- 5.1 順序存儲
- 5.2 鏈式存儲
- 6. 二叉樹的先中后序遍歷
- 6.1 先序遍歷的代碼
- 6.2 中序遍歷的代碼
- 6.3 后序遍歷的代碼
- 6.4 遍歷算術表達式樹
- 7. 二叉樹的層序遍歷
- 8. 由遍歷序列構造二叉樹
- 8.1 不同二叉樹的遍歷序列
- 8.2 前序+中序遍歷序列
- 8.3 后序+中序遍歷序列
- 8.4 層序+中序遍歷
- 9. 線索二叉樹
- 9.1 線索二叉樹的概念
- 9.1.1 中序線索二叉樹
- 線索二叉樹的存儲結構
- 9.1.2 先序線索二叉樹
- 9.1.3 后序線索二叉樹
- 9.2 二叉樹的線索化(代碼實現)
- 9.2.1 中序線索化
- 9.2.2 先序線索化
- 9.2.3 后序線索化
- 9.3 線索二叉樹找前驅/后繼
- 9.3.1 中序線索二叉樹找中序后繼
- 9.3.2 中序線索二叉樹找中序前驅
- 9.3.3 先序線索二叉樹找先序后繼
- 9.3.4 先序線索二叉樹找先序前驅
- 9.3.5 后序線索二叉樹找后序前驅
- 9.3.6 后序線索二叉樹找后序后繼
- 10. 樹的存儲結構
- 10.1 雙親表示法(順序存儲)
- 10.2 孩子表示法(順序+鏈式存儲)
- 10.3 孩子兄弟表示法(鏈式存儲)
- 10.4 森林和二叉樹的轉換
- 11 樹、森林的遍歷
- 11.1 樹的先根遍歷
- 11.2 樹的后根遍歷
- 11.3 樹的層次遍歷
- 11.4 森林的先序遍歷
- 11.5 森林的中序遍歷
- 12. 哈夫曼樹
- 12.1 帶權路徑
- 12.2 哈夫曼樹的定義
- 12.3 哈夫曼樹的構造
- 12.4 哈夫曼編碼
- 13. 并查集(新增考點)
- 13.1 查和并的實現
- 13.2 并查集的存儲結構
- 13.3 基本操作
- 13.4 代碼實現
- 13.5 Union操作的優化
- 13.6 Find操作的優化(壓縮路徑)
天勤部分
1. 樹的基礎知識
樹是一種遞歸定義的數據結構。遞歸特性:當前每一層都跟上一層有類似的結構,每一個子結構跟其父結構都類似。
1.1 結點的度
1.2 樹的度
所有結點中最大的分支數就是樹的度。
1.3 葉子結點
度為0的結點就是葉子結點。
1.4 雙親結點、孩子結點、祖先結點和子孫結點
1.5 兄弟結點和堂兄弟結點
1.6 高度和深度
1.7 存儲結構
這部分直接看下面王道的“10. 樹的存儲結構”。
2. 二叉樹的邏輯結構和存儲結構
2.1 性質
2.2 葉子結點數=雙分支結點數+1的靈活運用
當求一棵樹中的空指針個數等時,我們可以先在每個結點上填充上空指針,使得每個結點的度都為2,然后就可以運用公式了。
2.3 m叉樹的性質
王道部分
1. 樹的定義和基本術語
2. 樹的常考性質
3. 二叉樹的定義和基本術語
3.1 滿二叉樹和完全二叉樹
滿二叉樹是一種特殊的完全二叉樹。
3.2 二叉排序樹
3.3 平衡二叉樹
4. 二叉樹的性質
4.1 二叉樹的常考性質
結點樹=總度數+1;這的“1”表示的是根結點。
4.2 完全二叉樹的常考性質
這里的 h-1<log2 (n+1)<=h,表示的是log2 (n+1)在 h-1 和 h 之間相差不到一的小數,由于是<=h,所以向上取整。
5. 二叉樹的存儲結構
5.1 順序存儲
5.2 鏈式存儲
6. 二叉樹的先中后序遍歷
6.1 先序遍歷的代碼
6.2 中序遍歷的代碼
6.3 后序遍歷的代碼
6.4 遍歷算術表達式樹
7. 二叉樹的層序遍歷
8. 由遍歷序列構造二叉樹
8.1 不同二叉樹的遍歷序列
8.2 前序+中序遍歷序列
舉個例子:
8.3 后序+中序遍歷序列
舉個例子:
8.4 層序+中序遍歷
舉個例子:
再舉個例子:
必須跟中序序列組合才能確定唯一的二叉樹。
9. 線索二叉樹
9.1 線索二叉樹的概念
遍歷二叉樹是以一定的規則講二叉樹中的結點排列成一個線性序列,從而得到幾種遍歷序列,使得該序列中的每個結點(第一個和最后一個結點除外)都有一個直接前驅和直接后繼。
這種是沒有線索的時候,找遍歷序列中的前驅和后繼。
通過中序遍歷,先訪問D結點(visit(D)),然后繼續執行下去。
9.1.1 中序線索二叉樹
線索二叉樹的存儲結構
9.1.2 先序線索二叉樹
9.1.3 后序線索二叉樹
9.2 二叉樹的線索化(代碼實現)
9.2.1 中序線索化
9.2.2 先序線索化
9.2.3 后序線索化
9.3 線索二叉樹找前驅/后繼
9.3.1 中序線索二叉樹找中序后繼
9.3.2 中序線索二叉樹找中序前驅
9.3.3 先序線索二叉樹找先序后繼
9.3.4 先序線索二叉樹找先序前驅
9.3.5 后序線索二叉樹找后序前驅
9.3.6 后序線索二叉樹找后序后繼
10. 樹的存儲結構
10.1 雙親表示法(順序存儲)
10.2 孩子表示法(順序+鏈式存儲)
10.3 孩子兄弟表示法(鏈式存儲)
10.4 森林和二叉樹的轉換
11 樹、森林的遍歷
11.1 樹的先根遍歷
11.2 樹的后根遍歷
11.3 樹的層次遍歷
11.4 森林的先序遍歷
11.5 森林的中序遍歷
如果考試要是考到關于遍歷森林的代碼的話,我們可以先轉換成上述這種二叉樹(即森林用二叉樹來存儲),然后利用我們熟悉的二叉樹代碼繼續解決。
12. 哈夫曼樹
12.1 帶權路徑
12.2 哈夫曼樹的定義
只要是最優二叉樹就是哈夫曼樹。
12.3 哈夫曼樹的構造
12.4 哈夫曼編碼
13. 并查集(新增考點)
并查集的邏輯結構是一個集合。
這個時候我們可以將集合之間的關系類似地看成是森林,而每個集合中的元素也可以組成一棵樹。
13.1 查和并的實現
13.2 并查集的存儲結構
可以用雙親表示法來存儲并查集。
13.3 基本操作
13.4 代碼實現
13.5 Union操作的優化
優化思路:在每次Union操作構建樹的時候,盡量不要讓樹“長高”。
①用根結點的絕對值表示樹的結點總數。
②Union操作,讓小樹合并到大樹。
13.6 Find操作的優化(壓縮路徑)
每次Union時,都需要從指定元素出發找到該元素的根結點,也就是需要乘上Find函數的時間復雜度。
總結
以上是生活随笔為你收集整理的《数据结构》天勤和王道 第五章 树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 遥感图像的下载
- 下一篇: 求1+2阶乘+3阶乘+ 省略 +20阶乘