最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python數(shù)據(jù)結(jié)構(gòu)之樹的全面解讀

 更新時間:2021年11月02日 15:47:12   作者:Paranoid☆  
數(shù)據(jù)結(jié)構(gòu)中有很多樹的結(jié)構(gòu),其中包括二叉樹、二叉搜索樹、2-3樹、紅黑樹等等。本文中對數(shù)據(jù)結(jié)構(gòu)中常見的樹邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)進行了匯總,不求嚴格精準,但求簡單易懂

前言

提示:以下是本篇文章正文內(nèi)容

🧡基本概念

🌳樹的定義

樹是n(n≥0)個結(jié)點的有限集合,n = 0時,稱為空樹,這是一種特殊情況

在任意一棵非空樹中應滿足:
①有且僅有一個特定的稱為根的結(jié)點
②當n > 1時,其余結(jié)點可分為m(m > 0)個互不相交的有限集合T1,T2,…,Tm,其中每個集合本身又是一棵樹,并且稱為根結(jié)點的子樹==

在這里插入圖片描述

∅ 空樹——結(jié)點數(shù)為0的樹

非空樹的特性:

有且僅有一個根節(jié)點
除了根節(jié)點外,任何一個結(jié)點都有且僅有一個前驅(qū)
每個結(jié)點可以有0個或多個后繼

🌲基本術(shù)語

1.度

(1)結(jié)點的度:結(jié)點所擁有的子樹的個數(shù)

(2)樹的度:樹中各結(jié)點度的最大值

在這里插入圖片描述

A的度為3,同時也是樹的度,B的度為2

2.葉子節(jié)點和分支節(jié)點
(1)葉子節(jié)點
度為0的節(jié)點,也稱為終端結(jié)點

(2)分支節(jié)點
度不為0的節(jié)點,也稱為非終端結(jié)點

在上圖中,K,L,M,F,G,I,J均為葉子節(jié)點

3.雙親與孩子
(1)祖先結(jié)點:對于任何節(jié)點n ,它的祖先是位于根到節(jié)點n之間的路徑上的節(jié)點

(2)子孫結(jié)點:一個結(jié)點含有的子樹的根結(jié)點的子節(jié)點

在樹中,如果有一條路徑從節(jié)點x到節(jié)點y,則稱x為y的祖先,y為x的子孫

(3)雙親結(jié)點(父節(jié)點):若一個結(jié)點含有子結(jié)點,則這個結(jié)點稱為其子結(jié)點的父節(jié)點

(4)孩子結(jié)點:一個結(jié)點含有的子樹的根結(jié)點稱為該結(jié)點的子結(jié)點

(5)兄弟結(jié)點:具有相同父結(jié)點的結(jié)點互稱為兄弟結(jié)點

(6)堂兄弟結(jié)點:如果樹的兩個節(jié)點深度相同,但父節(jié)點不同,則它們是一對堂兄弟節(jié)點
B,C,D互為兄弟節(jié)點,E,G,I互為堂兄弟節(jié)點,B為E,F的父節(jié)點,而E,F為B的子節(jié)點

(4)樹的深度
節(jié)點所在層數(shù):根節(jié)點的層數(shù)為1,對于其他任何節(jié)點,若某節(jié)點在第K層,則其孩子節(jié)點在K+1層

樹的深度:樹中所有節(jié)點的最大層數(shù),也稱為高度
在上圖中,樹的深度為4

(5)樹的類型
有序樹:樹中結(jié)點的各子樹從左至右是有次序的,不能互換
無序樹:樹中結(jié)點的各子樹從左至右是無次序的,可以互換

在這里插入圖片描述

注:在數(shù)據(jù)結(jié)構(gòu)中,一般的討論的一般是有序樹

(6)森林
森林是m(m≥0)棵互不相交的樹的集合,m可為0,空森林

在這里插入圖片描述

💚樹的邏輯結(jié)構(gòu)

樹的遍歷:從根節(jié)點出發(fā),按照某種次序訪問樹中所有的節(jié)點,使得每個節(jié)點被訪問一次且僅被訪問一次

訪問:抽象操作,可以是對節(jié)點進行的各種處理,這里簡化為輸出節(jié)點的數(shù)據(jù)

遍歷的實質(zhì):樹的結(jié)構(gòu)(非線性結(jié)構(gòu)) – > 線性結(jié)構(gòu)

樹通常有前序(根)遍歷,后序(根)遍歷,層序(次)遍歷三種

🍉前序遍歷

樹的前序遍歷操作定義為:若樹為空,則空操作返回;否則:
(1)先訪問根節(jié)點
(2)然后按照從左到右的順序前序遍歷根節(jié)點的每一顆子樹

在這里插入圖片描述

如圖前序遍歷序列:A–>B–>D–>E–>H–>I–>F–>C–>G

🍓后序遍歷

樹的后序遍歷操作定義為:若樹為空,則空操作返回;否則:
(1)先按照從左到右的順序后序遍歷根節(jié)點的每一顆子樹
(2)最后訪問根節(jié)點

如圖后序遍歷序列:D–>H–>I–>E–>F–>B–>G–>C–A

🍒層序遍歷

樹的層序遍歷操作定義為:從樹的第一層(即根節(jié)點)開始,自上而下的逐層遍歷,在同一層中,按照從左到右的順序?qū)?jié)點逐個訪問

如圖層序遍歷序列:A–>B–>C–>D–>E–>F–>G–>H–>I

💜樹的存儲結(jié)構(gòu)

實現(xiàn)樹的存儲結(jié)構(gòu),關鍵在于表示樹中的節(jié)點之間的關系

🍀雙親表示法

基本思想:用一維數(shù)組來存儲樹的各個節(jié)點(一般按層序存儲),數(shù)組中的一個元素對應樹中的一個節(jié)點,包括節(jié)點的數(shù)據(jù)信息和節(jié)點的雙親在數(shù)組中的下標。

節(jié)點結(jié)構(gòu)

在這里插入圖片描述

struct PNode
{
	DataType data; //數(shù)據(jù)域
	int parent;   //指針域,雙親在數(shù)組中的下標
}

樹的雙親表示法實質(zhì)上是一個靜態(tài)鏈表
如圖所示:

在這里插入圖片描述

還可以將孩子節(jié)點或者兄弟節(jié)點的下標也進行存儲

在這里插入圖片描述

🍁孩子鏈表表示法

將結(jié)點的所有孩子放在一起,構(gòu)成線性表

基本思想:把每個結(jié)點的孩子排列起來,看成是一個線性表,且以單鏈表存儲,則n個結(jié)點共有n個孩子鏈表。這n個單鏈表共有n個頭指針,這n個頭指針又組成了一個線性表,為了便于進行查找采用順序存儲。最后, 將存放n個頭指針的數(shù)組和存放n個結(jié)點的數(shù)組結(jié)合起來,構(gòu)成孩子鏈表的表頭數(shù)組

鏈表中的每個節(jié)點包含一個數(shù)據(jù)域和多個指針域,每個指針域指向該節(jié)點的一個孩子節(jié)點

方案一:
指針域的個數(shù)等于樹的深度

在這里插入圖片描述

缺點:浪費存儲空間

在這里插入圖片描述

方案二:
指針域的個數(shù)等于該結(jié)點的度

在這里插入圖片描述

缺點:每個結(jié)點結(jié)構(gòu)不一致

在這里插入圖片描述

孩子節(jié)點

在這里插入圖片描述

struct CTNode
{
	int child;
	CTNode *next; // 指向下一個孩子結(jié)點的指針
}

表頭結(jié)點

在這里插入圖片描述

struct CBNode
{
	DataType data;
	CTNode *firstChild; // 每個鏈表的頭指針
}

存儲結(jié)構(gòu)

在這里插入圖片描述

🍃雙親孩子表示法

在孩子鏈表中表頭數(shù)組添加了節(jié)點的雙親結(jié)點

在這里插入圖片描述

🍂孩子兄弟表示法

某節(jié)點的第一個孩子是唯一的,某一節(jié)點的右兄弟是唯一的,設置兩個分別指向該節(jié)點的第一個孩子和右兄弟的指針

在這里插入圖片描述

struct TNode
{
	DataType data;
	TNode *firstChild,*rightSib;
}

在這里插入圖片描述

總結(jié)

提示:這里對文章進行總結(jié):

到此這篇關于Python數(shù)據(jù)結(jié)構(gòu)之樹的全面解讀的文章就介紹到這了,更多相關Python 數(shù)據(jù)結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 如何正確理解python裝飾器

    如何正確理解python裝飾器

    裝飾器(Decorators)是 Python 的一個重要部分。簡單地說:他們是修改其他函數(shù)的功能的函數(shù)。他們有助于讓我們的代碼更簡短
    2021-06-06
  • 跨平臺python異步回調(diào)機制實現(xiàn)和使用方法

    跨平臺python異步回調(diào)機制實現(xiàn)和使用方法

    這篇文章主要介紹了python異步回調(diào)機制的實現(xiàn)方法,提供了使用方法代碼
    2013-11-11
  • Python干貨實戰(zhàn)之八音符醬小游戲全過程詳解

    Python干貨實戰(zhàn)之八音符醬小游戲全過程詳解

    讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Python實現(xiàn)一個八音符醬小游戲,大家可以在過程中查缺補漏,提升水平
    2021-10-10
  • 使用pyecharts1.7進行簡單的可視化大全

    使用pyecharts1.7進行簡單的可視化大全

    這篇文章主要介紹了使用pyecharts1.7進行簡單的可視化大全,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • 詳解Python常用標準庫之os模塊與shutil模塊

    詳解Python常用標準庫之os模塊與shutil模塊

    os系統(tǒng)模塊與shutil文件操作模塊是Python常用的標準庫,本文將通過示例詳細講解一下二者的使用,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-06-06
  • Python Web版語音合成實例詳解

    Python Web版語音合成實例詳解

    這篇文章主要介紹了Python Web版語音合成實例詳解,語音合成技術(shù)能將用戶輸入的文字,轉(zhuǎn)換成流暢自然的語音輸出,并且可以支持語速、音調(diào)、音量設置,讓人機溝通更自然,需要的朋友可以參考下
    2019-07-07
  • 自己搭建resnet18網(wǎng)絡并加載torchvision自帶權(quán)重的操作

    自己搭建resnet18網(wǎng)絡并加載torchvision自帶權(quán)重的操作

    這篇文章主要介紹了自己搭建resnet18網(wǎng)絡并加載torchvision自帶權(quán)重的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • tensorflow更改變量的值實例

    tensorflow更改變量的值實例

    今天小編就為大家分享一篇tensorflow更改變量的值實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python-VTK批量讀取二維切片并顯示三維模型

    Python-VTK批量讀取二維切片并顯示三維模型

    這篇文章主要介紹了Python-VTK批量讀取二維切片并顯示三維模型,文章基于python的相關資料展開對主題的詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • Python中用pycurl監(jiān)控http響應時間腳本分享

    Python中用pycurl監(jiān)控http響應時間腳本分享

    這篇文章主要介紹了Python中用pycurl監(jiān)控http響應時間腳本分享,本文腳本實現(xiàn)監(jiān)控http相應碼,響應大小,建立連接時間,準備傳輸時間,傳輸?shù)谝粋€字節(jié)時間,完成時間,需要的朋友可以參考下
    2015-02-02

最新評論

噶尔县| 磐石市| 黔西县| 尼木县| 灵璧县| 四会市| 雷州市| 丰原市| 赤城县| 翁牛特旗| 安化县| 武威市| 泰来县| 德安县| 新邵县| 三门峡市| 诸城市| 桑植县| 德江县| 临邑县| 寻乌县| 东海县| 手游| 特克斯县| 健康| 南岸区| 荥阳市| 清苑县| 惠东县| 玛纳斯县| 瑞金市| 股票| 辰溪县| 交城县| 青川县| 喀喇| 延吉市| 西青区| 类乌齐县| 宜兰市| 松桃|