日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《数据结构》天勤和王道 第五章 树

發(fā)布時(shí)間:2023/12/31 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《数据结构》天勤和王道 第五章 树 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

《數(shù)據(jù)結(jié)構(gòu)》天勤和王道 第五章 樹

  • 天勤部分
    • 1. 樹的基礎(chǔ)知識(shí)
      • 1.1 結(jié)點(diǎn)的度
      • 1.2 樹的度
      • 1.3 葉子結(jié)點(diǎn)
      • 1.4 雙親結(jié)點(diǎn)、孩子結(jié)點(diǎn)、祖先結(jié)點(diǎn)和子孫結(jié)點(diǎn)
      • 1.5 兄弟結(jié)點(diǎn)和堂兄弟結(jié)點(diǎn)
      • 1.6 高度和深度
      • 1.7 存儲(chǔ)結(jié)構(gòu)
    • 2. 二叉樹的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)
      • 2.1 性質(zhì)
      • 2.2 葉子結(jié)點(diǎn)數(shù)=雙分支結(jié)點(diǎn)數(shù)+1的靈活運(yùn)用
      • 2.3 m叉樹的性質(zhì)
  • 王道部分
    • 1. 樹的定義和基本術(shù)語
    • 2. 樹的常考性質(zhì)
    • 3. 二叉樹的定義和基本術(shù)語
      • 3.1 滿二叉樹和完全二叉樹
      • 3.2 二叉排序樹
      • 3.3 平衡二叉樹
    • 4. 二叉樹的性質(zhì)
      • 4.1 二叉樹的常考性質(zhì)
      • 4.2 完全二叉樹的常考性質(zhì)
    • 5. 二叉樹的存儲(chǔ)結(jié)構(gòu)
      • 5.1 順序存儲(chǔ)
      • 5.2 鏈?zhǔn)酱鎯?chǔ)
    • 6. 二叉樹的先中后序遍歷
      • 6.1 先序遍歷的代碼
      • 6.2 中序遍歷的代碼
      • 6.3 后序遍歷的代碼
      • 6.4 遍歷算術(shù)表達(dá)式樹
    • 7. 二叉樹的層序遍歷
    • 8. 由遍歷序列構(gòu)造二叉樹
      • 8.1 不同二叉樹的遍歷序列
      • 8.2 前序+中序遍歷序列
      • 8.3 后序+中序遍歷序列
      • 8.4 層序+中序遍歷
    • 9. 線索二叉樹
      • 9.1 線索二叉樹的概念
        • 9.1.1 中序線索二叉樹
          • 線索二叉樹的存儲(chǔ)結(jié)構(gòu)
        • 9.1.2 先序線索二叉樹
        • 9.1.3 后序線索二叉樹
      • 9.2 二叉樹的線索化(代碼實(shí)現(xiàn))
        • 9.2.1 中序線索化
        • 9.2.2 先序線索化
        • 9.2.3 后序線索化
      • 9.3 線索二叉樹找前驅(qū)/后繼
        • 9.3.1 中序線索二叉樹找中序后繼
        • 9.3.2 中序線索二叉樹找中序前驅(qū)
        • 9.3.3 先序線索二叉樹找先序后繼
        • 9.3.4 先序線索二叉樹找先序前驅(qū)
        • 9.3.5 后序線索二叉樹找后序前驅(qū)
        • 9.3.6 后序線索二叉樹找后序后繼
    • 10. 樹的存儲(chǔ)結(jié)構(gòu)
      • 10.1 雙親表示法(順序存儲(chǔ))
      • 10.2 孩子表示法(順序+鏈?zhǔn)酱鎯?chǔ))
      • 10.3 孩子兄弟表示法(鏈?zhǔn)酱鎯?chǔ))
      • 10.4 森林和二叉樹的轉(zhuǎn)換
    • 11 樹、森林的遍歷
      • 11.1 樹的先根遍歷
      • 11.2 樹的后根遍歷
      • 11.3 樹的層次遍歷
      • 11.4 森林的先序遍歷
      • 11.5 森林的中序遍歷
    • 12. 哈夫曼樹
      • 12.1 帶權(quán)路徑
      • 12.2 哈夫曼樹的定義
      • 12.3 哈夫曼樹的構(gòu)造
      • 12.4 哈夫曼編碼
    • 13. 并查集(新增考點(diǎn))
      • 13.1 查和并的實(shí)現(xiàn)
      • 13.2 并查集的存儲(chǔ)結(jié)構(gòu)
      • 13.3 基本操作
      • 13.4 代碼實(shí)現(xiàn)
      • 13.5 Union操作的優(yōu)化
      • 13.6 Find操作的優(yōu)化(壓縮路徑)

天勤部分

1. 樹的基礎(chǔ)知識(shí)


樹是一種遞歸定義的數(shù)據(jù)結(jié)構(gòu)。遞歸特性:當(dāng)前每一層都跟上一層有類似的結(jié)構(gòu),每一個(gè)子結(jié)構(gòu)跟其父結(jié)構(gòu)都類似。

1.1 結(jié)點(diǎn)的度

1.2 樹的度


所有結(jié)點(diǎn)中最大的分支數(shù)就是樹的度。

1.3 葉子結(jié)點(diǎn)


度為0的結(jié)點(diǎn)就是葉子結(jié)點(diǎn)。

1.4 雙親結(jié)點(diǎn)、孩子結(jié)點(diǎn)、祖先結(jié)點(diǎn)和子孫結(jié)點(diǎn)



1.5 兄弟結(jié)點(diǎn)和堂兄弟結(jié)點(diǎn)


1.6 高度和深度

1.7 存儲(chǔ)結(jié)構(gòu)

這部分直接看下面王道的“10. 樹的存儲(chǔ)結(jié)構(gòu)”。

2. 二叉樹的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)


2.1 性質(zhì)


2.2 葉子結(jié)點(diǎn)數(shù)=雙分支結(jié)點(diǎn)數(shù)+1的靈活運(yùn)用


當(dāng)求一棵樹中的空指針個(gè)數(shù)等時(shí),我們可以先在每個(gè)結(jié)點(diǎn)上填充上空指針,使得每個(gè)結(jié)點(diǎn)的度都為2,然后就可以運(yùn)用公式了。

2.3 m叉樹的性質(zhì)


王道部分

1. 樹的定義和基本術(shù)語





2. 樹的常考性質(zhì)







3. 二叉樹的定義和基本術(shù)語


3.1 滿二叉樹和完全二叉樹

滿二叉樹是一種特殊的完全二叉樹。

3.2 二叉排序樹

3.3 平衡二叉樹


4. 二叉樹的性質(zhì)

4.1 二叉樹的常考性質(zhì)


結(jié)點(diǎn)樹=總度數(shù)+1;這的“1”表示的是根結(jié)點(diǎn)。

4.2 完全二叉樹的常考性質(zhì)


這里的 h-1<log2 (n+1)<=h,表示的是log2 (n+1)在 h-1 和 h 之間相差不到一的小數(shù),由于是<=h,所以向上取整。

5. 二叉樹的存儲(chǔ)結(jié)構(gòu)

5.1 順序存儲(chǔ)





5.2 鏈?zhǔn)酱鎯?chǔ)



6. 二叉樹的先中后序遍歷





6.1 先序遍歷的代碼





6.2 中序遍歷的代碼


6.3 后序遍歷的代碼


6.4 遍歷算術(shù)表達(dá)式樹



7. 二叉樹的層序遍歷


8. 由遍歷序列構(gòu)造二叉樹

8.1 不同二叉樹的遍歷序列





8.2 前序+中序遍歷序列


舉個(gè)例子:




8.3 后序+中序遍歷序列


舉個(gè)例子:





8.4 層序+中序遍歷


舉個(gè)例子:




再舉個(gè)例子:





必須跟中序序列組合才能確定唯一的二叉樹。

9. 線索二叉樹

9.1 線索二叉樹的概念

遍歷二叉樹是以一定的規(guī)則講二叉樹中的結(jié)點(diǎn)排列成一個(gè)線性序列,從而得到幾種遍歷序列,使得該序列中的每個(gè)結(jié)點(diǎn)(第一個(gè)和最后一個(gè)結(jié)點(diǎn)除外)都有一個(gè)直接前驅(qū)和直接后繼。
這種是沒有線索的時(shí)候,找遍歷序列中的前驅(qū)和后繼。

通過中序遍歷,先訪問D結(jié)點(diǎn)(visit(D)),然后繼續(xù)執(zhí)行下去。

9.1.1 中序線索二叉樹

線索二叉樹的存儲(chǔ)結(jié)構(gòu)


9.1.2 先序線索二叉樹


9.1.3 后序線索二叉樹




9.2 二叉樹的線索化(代碼實(shí)現(xiàn))

9.2.1 中序線索化



9.2.2 先序線索化




9.2.3 后序線索化



9.3 線索二叉樹找前驅(qū)/后繼

9.3.1 中序線索二叉樹找中序后繼


9.3.2 中序線索二叉樹找中序前驅(qū)


9.3.3 先序線索二叉樹找先序后繼

9.3.4 先序線索二叉樹找先序前驅(qū)


9.3.5 后序線索二叉樹找后序前驅(qū)

9.3.6 后序線索二叉樹找后序后繼



10. 樹的存儲(chǔ)結(jié)構(gòu)

10.1 雙親表示法(順序存儲(chǔ))






10.2 孩子表示法(順序+鏈?zhǔn)酱鎯?chǔ))


10.3 孩子兄弟表示法(鏈?zhǔn)酱鎯?chǔ))



10.4 森林和二叉樹的轉(zhuǎn)換



11 樹、森林的遍歷

11.1 樹的先根遍歷

11.2 樹的后根遍歷

11.3 樹的層次遍歷

11.4 森林的先序遍歷


11.5 森林的中序遍歷



如果考試要是考到關(guān)于遍歷森林的代碼的話,我們可以先轉(zhuǎn)換成上述這種二叉樹(即森林用二叉樹來存儲(chǔ)),然后利用我們熟悉的二叉樹代碼繼續(xù)解決。

12. 哈夫曼樹

12.1 帶權(quán)路徑

12.2 哈夫曼樹的定義


只要是最優(yōu)二叉樹就是哈夫曼樹。

12.3 哈夫曼樹的構(gòu)造


12.4 哈夫曼編碼





13. 并查集(新增考點(diǎn))

并查集的邏輯結(jié)構(gòu)是一個(gè)集合。




這個(gè)時(shí)候我們可以將集合之間的關(guān)系類似地看成是森林,而每個(gè)集合中的元素也可以組成一棵樹。

13.1 查和并的實(shí)現(xiàn)


13.2 并查集的存儲(chǔ)結(jié)構(gòu)

可以用雙親表示法來存儲(chǔ)并查集。

13.3 基本操作

13.4 代碼實(shí)現(xiàn)



13.5 Union操作的優(yōu)化

優(yōu)化思路:在每次Union操作構(gòu)建樹的時(shí)候,盡量不要讓樹“長高”。
①用根結(jié)點(diǎn)的絕對(duì)值表示樹的結(jié)點(diǎn)總數(shù)。
②Union操作,讓小樹合并到大樹。


13.6 Find操作的優(yōu)化(壓縮路徑)







每次Union時(shí),都需要從指定元素出發(fā)找到該元素的根結(jié)點(diǎn),也就是需要乘上Find函數(shù)的時(shí)間復(fù)雜度。

總結(jié)

以上是生活随笔為你收集整理的《数据结构》天勤和王道 第五章 树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。