国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[入門必看]數據結構5.4:樹、森林

這篇具有很好參考價值的文章主要介紹了[入門必看]數據結構5.4:樹、森林。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


第五章 樹與二叉樹

小題考頻:30
大題考頻:8


5.4 樹、森林

難度:☆☆☆

知識總覽

5.4.1 樹的存儲結構

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

5.4.2 樹、森林與二叉樹的轉化

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

5.4.3 樹和森林的遍歷

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論


5.4.1 樹的存儲結構

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

樹的邏輯結構

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

樹是一種遞歸定義的數據結構
一棵樹要么是空樹,要么至少有一個根結點,根結點的下方可能有零棵或多棵互不相交的子樹。

二叉樹:一個分支結點最多只能有兩棵子樹
:一個分支結點可以有多棵子樹

如何用順序存儲來存儲樹這種數據結構?


回顧:二叉樹的順序存儲

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

二叉樹的順序存儲:按照完全二叉樹中的結點順序,將各結點存儲到數組的對應位置。數組下標反映結點之間的邏輯關系
數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

順序存儲二叉樹時,結點編號會和完全二叉樹對應。
那么這種思路能否推廣到普通的樹?


如何實現樹的順序存儲?

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

由于每個分支結點的子樹數量不確定,所以沒有與之對應的“完全樹”,單純依靠數組下標無法判斷結點之間的邏輯關系。

可以發(fā)現樹中,除了根結點外,其他任意結點都有且只有一個雙親結點(父結點)。

思路:用數組順序存儲各個結點。每個結點對應一個數組下標,在其中保存數據元素、指向雙親結點(父結點)的“指針”

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

樹的存儲1:雙親表示法

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

數組元素中,包含兩個字段,第一個字段表示數據元素,第二個字段用一個int型變量指明雙親在數組中的下標是多少。
用剛才定義的結構體聲明一個數組。
最后記錄結點的總數。

拓展:雙親表示法存儲“森林”

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

雙親表示法的優(yōu)缺點

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

優(yōu)點:找雙親(父結點)好
缺點:找孩子難,要遍歷整個數組
應用場景:找父親多,找孩子少,Eg.并查集


樹的存儲2:孩子表示法

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

在每個數組在鏈表元素中,保留一個鏈表頭指針,如果其有孩子,在鏈表中保存所有孩子結點的編號

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

孩子表示法是順序存儲+鏈式存儲結合
一個數組元素中包含data和一個鏈表CTNode的指針,鏈表結點中保存孩子的編號以及指向下一個鏈表結點的指針。
用剛才定義的結構體CTBox聲明一個數組,存儲各結點的信息。
并記錄結點總數和根的位置。

拓展:孩子表示法存儲“森林”

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

用孩子表示法存儲森林,需要記錄多個根的位置

孩子表示法的優(yōu)缺點

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

優(yōu)點:找孩子好
缺點:找雙親(父結點)難,要遍歷整個數組
應用場景:找孩子多,找父親少,Eg.服務流程樹【辦理業(yè)務請按1】


樹的存儲3:孩子兄弟表示法

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

鏈式實現
結構體包含數據,和兩個指針,第一個指針指向第一個孩子,第二個指針指向右邊一個兄弟【類似二叉樹結點的定義】
采用二叉鏈表實現

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

根結點是A,左指針指向B,右指針指向NULL;
C是B的右邊第一個兄弟結點,連到B的右指針,D結點連到C的右指針;
E是B的第一個孩子,連到B的左指針;
F是E的右邊第一個兄弟結點,連到E的右指針,G結點連到F的右指針,H連到G的右指針,I連到H的右指針,J連到I的右指針;
K是E的第一個孩子,連到E的左指針。

孩子兄弟表示法形態(tài)和二叉樹類似。

拓展:孩子兄弟表示法存儲“森林”

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

把樹根C看做B的兄弟,連到B右指針上,以此類推。


5.4.2 樹、森林與二叉樹的轉化

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

樹->二叉樹的轉換

用孩子兄弟表示法存儲樹或者森林的時候會呈現出和二叉樹類似的形態(tài)。
樹、森林與二叉樹的轉換本質上就是畫出用孩子兄弟表示法表示的樹和森林。

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

樹 -> 二叉樹轉換技巧:
① 先在二叉樹中,畫一個根結點。
② 按**“樹的層序”**依次處理每個結點。

處理一個結點的方法是:如果當前處理的結點在樹中有孩子,就把所有孩子結點“用右指針串成糖葫蘆”,并在二叉樹中把第一個孩子掛在當前結點的左指針下方

Eg1:

A結點:

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論----->數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

B結點:
數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論----->數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

C結點:
數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

H結點:
數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

Eg2.
數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論


森林->二叉樹的轉換

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論
思路同上。
注意,第一步:森林中各樹的根結點視為兄弟,用右指針串起來。
數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論
Eg2.

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論


二叉樹->樹的轉換

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論
還原A結點:
數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論
以此類推還原。

Eg2.
數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論


二叉樹->森林的轉換

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論
原理類似。
注意,先將根節(jié)點和一串右指針還原成多棵樹的根結點。

Eg2.
數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論


5.4.3 樹和森林的遍歷

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

樹的邏輯結構

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

有遞歸特性,可以用遞歸算法來實現對樹的遍歷


樹的先根遍歷

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

訪問根結點visit(R),接下來用while循環(huán)來檢查其還有沒有下一個沒有被訪問過的子樹。
如果有,那么對子樹也采取先根遍歷的策略。

樹的先根遍歷序列與這棵樹相應二叉樹的先序序列相同。


樹的后根遍歷

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

原理類似,處理完所有子樹時訪問結點。
樹的后根遍歷序列與這棵樹相應二叉樹的后序序列相同。


樹的層次遍歷

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論
實現思路和二叉樹一樣,用一個輔助隊列來實現

根結點入隊:
數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論
隊頭元素出隊,該元素的孩子依次入隊
數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論
重復該過程

盡量橫向探索,也叫廣度優(yōu)先遍歷。
那么先根遍歷和后根遍歷,也叫深度優(yōu)先遍歷。


森林的先序遍歷

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

森林去掉根結點后各子樹又組成森林,森林這種數據結構是和樹相互遞歸定義的
可以用遞歸的思想來遍歷森林

首先,訪問森林中第一棵樹的根結點B
先序遍歷第一棵樹中根結點的子樹森林,E、F兩棵樹組成的森林
重復第一步,先訪問森林中第一棵樹的根結點E
遍歷E的兩個子樹森林,即K、L兩棵樹組成的森林
遍歷完K后,再遍歷除了第一棵樹K之后的剩余的樹構成的森林,即L

效果等同于依次對各個樹進行先根遍歷
可以對各個子樹進行一個先序遍歷,然后排出一個完整的序列

另一種方法:轉換成與之對應的二叉樹:
數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

效果等同于依次對二叉樹的先序遍歷

森林的中序遍歷

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論
同樣可以轉換成與之對應的二叉樹:
數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

效果等同于依次對二叉樹的中序遍歷


知識回顧與重要考點

5.4.1 樹的存儲結構

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

  • 雙親表示法:順序存儲,保存父結點下標,易找父,難找孩
  • 孩子表示法:順序存儲,保存孩子鏈表頭指針(順序+鏈式),易找孩,難找父
    數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論
  • 孩子兄弟表示法:二叉鏈表存儲,左孩子右兄弟,形態(tài)上和二叉樹類似

重要考點:樹、森林與二叉樹的轉換


5.4.2 樹、森林與二叉樹的轉化

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論

  • 本質上就是用孩子兄弟表示法存儲樹或森林
  • 存儲森林時,將每棵樹的根結點視為兄弟
  • Tips:記“本質”,不記方法。方法只是表象,“本質”才是內核。

5.4.3 樹和森林的遍歷

數據結構森林,# 第5章 樹與二叉樹,數據結構,算法,圖論文章來源地址http://www.zghlxwxcb.cn/news/detail-773487.html

  • 對森林的遍歷可以轉換成對二叉樹的遍歷

到了這里,關于[入門必看]數據結構5.4:樹、森林的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 數據結構--樹與二叉樹

    數據結構--樹與二叉樹

    樹的定義 樹是n(n =0)個節(jié)點的有限集。當n=0 時,稱為空樹 在任意一棵非空樹中應滿足 有且僅有一個特定的稱為根的結點 當n1 時,其余節(jié)點可分為m(m0) 個互不相交的有限集T1,T2……Tm,其中每個集合本身又是一棵樹,并且稱為根的子樹 樹是一種邏輯結構,也是一種分層結構 樹的

    2024年02月22日
    瀏覽(22)
  • 【數據結構】樹與二叉樹

    【數據結構】樹與二叉樹

    樹是一種 非線性的數據結構 ,它是由n(n=0)個有限結點組成一個具有層次關系的集合。 把它叫做樹是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的 。它具有以下的特點: 有一個特殊的結點,稱為根結點,根結點沒有前驅結點 除根結點外,其余結點被分

    2024年02月11日
    瀏覽(26)
  • 數據結構_樹與二叉樹

    數據結構_樹與二叉樹

    目錄 1. 樹的基本概念 1.1 樹的定義 1.2 基本術語 1.3 樹的性質 1.4 相關練習 2. 二叉樹的概念 2.1 二叉樹的概念及其主要特性 2.2 二叉樹的存儲結構 2.2.1 順序存儲結構 2.2.2 鏈式存儲結構 2.3 相關練習 3. 二叉樹的遍歷和線索二叉樹 3.1 二叉樹的遍歷 3.1.1 先序遍歷 3.1.2 中序遍歷 3.1

    2024年02月04日
    瀏覽(22)
  • 【數據結構】樹與二叉樹(中)

    目錄 前言: 一、順序存儲結構: 二、堆: 1.堆的性質: 2.堆的性質: 3.堆的實現: Ⅰ.堆的初始化: ?Ⅱ.堆的插入(含向上調整): ?Ⅲ.堆的刪除(含向下調整算法): Ⅳ.取堆頂的數據: Ⅴ.堆中的數據個數: Ⅵ.堆的判空: ?Ⅶ.堆的銷毀: 總結: ? ? ? ? 上篇文章中,

    2024年02月16日
    瀏覽(21)
  • 數據結構:圖文詳解 樹與二叉樹(樹與二叉樹的概念和性質,存儲,遍歷)

    數據結構:圖文詳解 樹與二叉樹(樹與二叉樹的概念和性質,存儲,遍歷)

    目錄 一.樹的概念 二.樹中重要的概念 三.二叉樹的概念 滿二叉樹 完全二叉樹 四.二叉樹的性質 五.二叉樹的存儲 六.二叉樹的遍歷 前序遍歷 中序遍歷? 后序遍歷? 樹是一種 非線性數據結構 ,它由節(jié)點和邊組成。樹的每個節(jié)點可以有零個或多個子節(jié)點,其中一個節(jié)點被指定為

    2024年02月04日
    瀏覽(25)
  • 數據結構與算法——樹與二叉樹

    數據結構與算法——樹與二叉樹

    ??各位小伙伴久等了,本專欄新文章出爐了?。?! 我又回來啦,接下來的時間里,我會持續(xù)把數據結構與算法專欄更新完。 ??樹型結構?? 是一類重要的 ?非線性數據結構 ,其中以樹和二叉樹最為常用,直觀來看,樹是以分支關系定義的層次結構。樹型結構在客觀世界中

    2024年02月11日
    瀏覽(16)
  • 【數據結構與算法】樹與二叉樹

    【數據結構與算法】樹與二叉樹

    除了之前我們講的棧、隊列、鏈表等線性結構,數據結構中還有著一對多的 非線性結構 ——— 樹 。 樹是有 n 個結點組成的有限集,當n=0時為空樹,在任意一顆非空樹中,有且僅有一個 特定的根結點 ;當n1時,其余結點又可以分為一棵樹,稱為根的 子樹 。 如下圖所示: A為

    2023年04月09日
    瀏覽(25)
  • 【數據結構】24王道考研筆記——樹與二叉樹

    【數據結構】24王道考研筆記——樹與二叉樹

    樹是n個結點的有限集合,n=0時,稱為空樹。非空樹滿足: 除了根節(jié)點外,任何一個結點都有且僅有一個前驅 結點的層次(深度):從上往下數 結點的高度:從下往上數 樹的高度(深度):總共有多少層 結點的度:有幾個孩子(分支) 樹的度:各節(jié)點的度的最大值 森林:

    2024年02月13日
    瀏覽(28)
  • 數據結構與算法——樹與二叉樹篇詳解

    數據結構與算法——樹與二叉樹篇詳解

    樹形結構是一種非常重要的 非線性結構 ,樹形結構中數據元素之間具有 一對多 的邏輯關系。 1.1.1 樹的定義 樹是由n(n=0)個結點所構成的有限集合 當n=0時,稱為空樹 當n0時,n個結點滿足以下條件 有且僅有一個稱為根的結點 其余結點可分為m個互不相交的有限集合,且每一個

    2024年02月06日
    瀏覽(24)
  • 數據結構--》解鎖數據結構中樹與二叉樹的奧秘(二)

    數據結構--》解鎖數據結構中樹與二叉樹的奧秘(二)

    ??????? 數據結構中的樹與二叉樹,是在建立非線性數據結構方面極為重要的兩個概念。它們不僅能夠模擬出生活中各種實際問題的復雜關系,還常被用于實現搜索、排序、查找等算法,甚至成為一些大型軟件和系統中的基礎設施。 ??????? 無論你是初學者還是進階者,

    2024年02月08日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包