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

數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念

這篇具有很好參考價值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

引言

現(xiàn)在是北京時間的2023年6月7號15點28分,剛考完了一課期末考試,回到宿舍就立馬準備發(fā)布這篇博客。距離完成本周復習指標還差兩篇博客。加油!

1.樹的概念

樹是一種非線性的數(shù)據(jù)結(jié)構(gòu),它是由n(n>=0)個有限結(jié)點組成一個具有層次關(guān)系的集合。把它叫做樹是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。樹大致可以分成兩個部分構(gòu)成,即根和子樹。根節(jié)點就是樹最特殊的節(jié)點,它沒有前驅(qū)結(jié)點。除根節(jié)點外,其余結(jié)點被分成M(M>0)個互不相交的集合T1、T2、……、Tm,其中每一個集合Ti(1<= i<= m)又是一棵結(jié)構(gòu)與樹類似的子樹。每棵子樹的根結(jié)點有且只有一個前驅(qū),可以有0個或多個后繼。因此樹是可以遞歸定義的。

數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念
注意: 子樹之間不能有交集,否則就不是樹形結(jié)構(gòu),就變成圖形結(jié)構(gòu)了。
數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念

1.1.樹的其他相關(guān)概念

數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念

節(jié)點的度: 個節(jié)點含有的子樹的個數(shù)稱為該節(jié)點的度; 如上圖:A的為6
葉節(jié)點或終端節(jié)點: 度為0的節(jié)點稱為葉節(jié)點; 如上圖:B、C、H、I…等節(jié)點為葉節(jié)點
非終端節(jié)點或分支節(jié)點: 度不為0的節(jié)點; 如上圖:D、E、F、G…等節(jié)點為分支節(jié)點
雙親節(jié)點或父節(jié)點(重要): 若一個節(jié)點含有子節(jié)點,則這個節(jié)點稱為其子節(jié)點的父節(jié)點; 如上圖:A是B的父節(jié)點
孩子節(jié)點或子節(jié)點(重要): 一個節(jié)點含有的子樹的根節(jié)點稱為該節(jié)點的子節(jié)點; 如上圖:B是A的孩子節(jié)點
兄弟節(jié)點: 具有相同父節(jié)點的節(jié)點互稱為兄弟節(jié)點; 如上圖:B、C是兄弟節(jié)點
樹的度: 一棵樹中,最大的節(jié)點的度稱為樹的度; 如上圖:樹的度為6。大家常聽見的二叉樹也就是度為2的樹
節(jié)點的層次: 從根開始定義起,根為第1層,根的子節(jié)點為第2層,以此類推;
樹的高度或深度(重要): 樹中節(jié)點的最大層次; 如上圖:樹的高度為4
堂兄弟節(jié)點: 雙親在同一層的節(jié)點互為堂兄弟;如上圖:H、I互為兄弟節(jié)點
節(jié)點的祖先(了解): 從根到該節(jié)點所經(jīng)分支上的所有節(jié)點;如上圖:A是所有節(jié)點的祖先
子孫(了解): 以某節(jié)點為根的子樹中任一節(jié)點都稱為該節(jié)點的子孫。如上圖:所有節(jié)點都是A的子孫
森林: 由m(m>0)棵互不相交的樹的集合稱為森林;比如并查集這種數(shù)據(jù)結(jié)構(gòu)就是由森林構(gòu)成。

2.樹的代碼實現(xiàn)的結(jié)構(gòu)

前面已經(jīng)介紹了樹的基本概念,下面我們來看看樹要怎么用代碼來實現(xiàn)呢?

//這樣結(jié)構(gòu)定義樹可以嗎?
struct TreeNode
{
	struct TreeNode* child1;
	struct TreeNode* child2;
	struct TreeNode* child3;
	//...
	int data;
};

答案是不行的,因為它沒有用樹的度來明確規(guī)定最多應該定義幾個孩子。所以這樣的結(jié)構(gòu)是錯誤的。下面我在給大家看一個結(jié)構(gòu)。假設樹的度為N,且看下面的代碼。

#define N 5
//假設N為5
struct TreeNode
{
	struct TreeNode* ChildrenArr[N];
	int data;
};

下面介紹一種很牛的表示結(jié)構(gòu),左兄弟右孩子表示法。即用該樹結(jié)點只有兩個指向,分別指向第一個孩子和下一個兄弟結(jié)點。這種表示法可以構(gòu)造出所有的樹形結(jié)構(gòu)。
數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念


typedef int DataType;
struct TreeNode
{
	struct TreeNode* _firstChild1; // 第一個孩子結(jié)點
	struct TreeNode* _pNextBrother; // 指向其下一個兄弟結(jié)點
	DataType _data; // 結(jié)點中的數(shù)據(jù)域
};

這種表示方法可以節(jié)省存儲空間,同時也提高了樹形結(jié)構(gòu)的遍歷效率,因為可以直接定位到每個節(jié)點的左孩子和右兄弟。

2.1.樹形結(jié)構(gòu)的應用

通常操作系統(tǒng)的磁盤文件結(jié)構(gòu)就是一個經(jīng)典的樹形結(jié)構(gòu)。這里我以Linux系統(tǒng)為例。
數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念
為什么要用樹形的結(jié)構(gòu)來當磁盤文件的系統(tǒng)呢?Linux系統(tǒng)的磁盤文件結(jié)構(gòu)采用樹形結(jié)構(gòu),為用戶提供了清晰、簡單、方便、高效的文件管理方式。

3.二叉樹的概念

二叉樹其實就是度為二的樹。通常有以下幾種情況構(gòu)成。
數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念

二叉樹度為0的結(jié)點永遠比度為2的多一個。下面我就簡單舉兩個簡單場景來驗證這一結(jié)論。
數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念

3.1.特殊二叉樹的概念

3.1.1.完全二叉樹

對于一棵深度為k的二叉樹,若它的所有節(jié)點都在第1到第k層,且所有葉子結(jié)點都在第k層或者第k-1層且在第k層的順序必須從左到右連續(xù),那么這棵二叉樹就是一棵完全二叉樹。滿二叉樹是特殊的完全二叉樹。
數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念
那么高度為h的完全二叉樹要怎么求出結(jié)點個數(shù)范圍呢?
數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念
同理反推可得,完全二叉樹的高度范圍log以2為底的(Sn)的對數(shù)+1 或者 log以二為底的(Sn+1)的對數(shù)。

3.1.2.滿二叉樹

一個二叉樹,如果每一個層的結(jié)點數(shù)都達到最大值,則這個二叉樹就是滿二叉樹。也就是
說,如果一個二叉樹的層數(shù)為h,且結(jié)點總數(shù)是2的h次方-1,則它就是滿二叉樹。
數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念
為什么滿二叉樹的結(jié)點總數(shù)是2的h次方-1呢?下面且看我的分析。
數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念
可以看到其實滿二叉樹的總結(jié)點是一個等差公式,當然其實直接記結(jié)論是滿二叉樹的總結(jié)點個數(shù)為2的h次方-1就好。同理反推可得滿二叉樹的高度等于 h = log以二為底的(Sn+1)的對數(shù)。

3.2.二叉樹試題講解

3.2.1.試題一

數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念
本題主要考核的是對于二叉樹的基本性質(zhì)的了解,即二叉樹中度為0的結(jié)點個數(shù)永遠比度為2的結(jié)點個數(shù)多一個,本題選B。

3.2.2.試題二

數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念
本題其實關(guān)鍵為完全二叉樹。這里就得根據(jù)完全二叉樹度為1 的結(jié)點只有可能是1個或者0個,再根據(jù)這一條件在加上二叉樹度為0永遠比度為2的多一個結(jié)點??梢酝茢喑龆葹?的結(jié)點為1個,即葉子結(jié)點n0=2n / 2 = n。本題選A。
數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念

3.2.3.試題三

數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念
本題依舊是考驗對完全二叉樹概念的了解的。首先我們需要知道完全二叉樹的結(jié)點為:Sn=n0+n0-1+n1。根據(jù)Sn=767,又因為n0和n1必須是整數(shù),所以n1 = 0。故2n0 = 768,n0等于384。本題選B。

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

二叉樹的存儲結(jié)構(gòu)分為兩種,鏈式結(jié)構(gòu)二叉樹和順序結(jié)構(gòu)二叉樹。其底層實現(xiàn)對應的是鏈表和順序表。

4.1.順序結(jié)構(gòu)存儲

順序結(jié)構(gòu)二叉樹其實就是用數(shù)組來進行對數(shù)據(jù)的管理。一般只適合完全二叉樹使用,因為不是完全二叉樹會有空間的浪費。而現(xiàn)實中使用中只有堆才會使用數(shù)組來存儲,關(guān)于堆后面我會專門講解。二叉樹順序存儲在物理上是一個數(shù)組,在邏輯上是一顆二叉樹。
數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念
數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念
用數(shù)組的方式存儲二叉樹是帶有局限性性的,因為只適合完全二叉樹的存儲。

4.2.鏈式結(jié)構(gòu)存儲

二叉樹的鏈式存儲結(jié)構(gòu)是指,用鏈表來表示一棵二叉樹,即用鏈來指示元素的邏輯關(guān)系。 通常的方法是鏈表中每個結(jié)點由三個域組成,數(shù)據(jù)域和左右指針域,左右指針分別用來給出該結(jié)點左孩子和右孩子所在的鏈結(jié)點的存儲地址 。鏈式結(jié)構(gòu)又分為二叉鏈和三叉鏈,當前學習的是二叉鏈,大名鼎鼎的紅黑樹用到的就是三叉鏈。

數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念文章來源地址http://www.zghlxwxcb.cn/news/detail-475084.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)——樹的概念、二叉樹的概念的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】樹及二叉樹的概念

    【數(shù)據(jù)結(jié)構(gòu)】樹及二叉樹的概念

    ?? 作者:日出等日落 ?? 專欄:數(shù)據(jù)結(jié)構(gòu) 一次失敗,只是證明我們成功的決心還夠堅強。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ——博 維 目錄 ???樹概念及結(jié)構(gòu): ?樹的概念: ?樹的相關(guān)概念?:?編輯 ??樹的表示: ?樹在實際中的運用: ??二叉樹概念及結(jié)構(gòu) ?概念

    2023年04月23日
    瀏覽(26)
  • 愛上數(shù)據(jù)結(jié)構(gòu):二叉樹的基本概念

    愛上數(shù)據(jù)結(jié)構(gòu):二叉樹的基本概念

    ? ? ??個人主頁 : guoguoqiang. ?? 專欄 : 數(shù)據(jù)結(jié)構(gòu) ? 樹是一種非線性的數(shù)據(jù)結(jié)構(gòu),它是由n(n=0)個有限結(jié)點組成一個具有層次關(guān)系的集合。把它叫做樹是因 為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。 沒有前驅(qū)節(jié)點的結(jié)點叫做根結(jié)點 在樹中,子樹不

    2024年04月14日
    瀏覽(18)
  • 數(shù)據(jù)結(jié)構(gòu)--線索二叉樹的概念

    數(shù)據(jù)結(jié)構(gòu)--線索二叉樹的概念

    中序遍歷序列:D G B E A F C ①如何找到指定結(jié)點p在中序遍歷序列中的前驅(qū)? ②如何找到p的中序后繼? 思路: 從根節(jié)點出發(fā),重新進行一次中序遍歷,指針q記錄當前訪問的結(jié)點,指針pre記錄上一個被訪問的結(jié)點 ①當q p時,pre為前驅(qū) ②當pre p時,q為后繼 缺點 : 找前驅(qū)、后繼很不方便

    2024年02月13日
    瀏覽(24)
  • 初級數(shù)據(jù)結(jié)構(gòu)(五)——樹和二叉樹的概念

    初級數(shù)據(jù)結(jié)構(gòu)(五)——樹和二叉樹的概念

    ????文中代碼源文件已上傳:數(shù)據(jù)結(jié)構(gòu)源碼 ?-上一篇 初級數(shù)據(jù)結(jié)構(gòu)(四)——隊列 ? ? ? ?|????????初級數(shù)據(jù)結(jié)構(gòu)(六)——堆 下一篇- ? ? ? ? 自然界中的樹由根部開始向上生長,隨機長出分支,分支之上又可長出分支,層層遞進,直至長出葉子則此分支結(jié)束。 ??

    2024年02月04日
    瀏覽(25)
  • 【初階數(shù)據(jù)結(jié)構(gòu)】樹結(jié)構(gòu)與二叉樹的基礎(chǔ)概念

    【初階數(shù)據(jù)結(jié)構(gòu)】樹結(jié)構(gòu)與二叉樹的基礎(chǔ)概念

    君兮_的個人主頁 勤時當勉勵 歲月不待人 C/C++ 游戲開發(fā) Hello,米娜桑們,這里是君兮_,今天帶來數(shù)據(jù)結(jié)構(gòu)里的重點內(nèi)容也是在筆試,面試中的常見考點——樹與二叉樹,其中二叉樹又分為很多種,我們先來講講基礎(chǔ)的內(nèi)容帶大家一步步入門 在介紹二叉樹之前,我們得先知道什

    2024年02月08日
    瀏覽(29)
  • 數(shù)據(jù)結(jié)構(gòu):圖文詳解 樹與二叉樹(樹與二叉樹的概念和性質(zhì),存儲,遍歷)

    數(shù)據(jù)結(jié)構(gòu):圖文詳解 樹與二叉樹(樹與二叉樹的概念和性質(zhì),存儲,遍歷)

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

    2024年02月04日
    瀏覽(25)
  • 【數(shù)據(jù)結(jié)構(gòu)】樹二叉樹的概念以及堆的詳解

    【數(shù)據(jù)結(jié)構(gòu)】樹二叉樹的概念以及堆的詳解

    ?鏈接1:【數(shù)據(jù)結(jié)構(gòu)】順序表 ?鏈接2:【數(shù)據(jù)結(jié)構(gòu)】單鏈表 ?鏈接3:【數(shù)據(jù)結(jié)構(gòu)】雙向帶頭循環(huán)鏈表 ?鏈接4:【數(shù)據(jù)結(jié)構(gòu)】棧和隊列 百度百科的解釋 :樹是一種 非線性 的數(shù)據(jù)結(jié)構(gòu),它是由n(n≥0)個有限節(jié)點組成一個具有層次關(guān)系的集合。 把它叫做樹是因為它看起來像

    2024年02月16日
    瀏覽(51)
  • 【數(shù)據(jù)結(jié)構(gòu)】樹與二叉樹(一):樹(森林)的基本概念:父親、兒子、兄弟、后裔、祖先、度、葉子結(jié)點、分支結(jié)點、結(jié)點的層數(shù)、路徑、路徑長度、結(jié)點的深度、樹的深度

    【數(shù)據(jù)結(jié)構(gòu)】樹與二叉樹(一):樹(森林)的基本概念:父親、兒子、兄弟、后裔、祖先、度、葉子結(jié)點、分支結(jié)點、結(jié)點的層數(shù)、路徑、路徑長度、結(jié)點的深度、樹的深度

    樹 一棵樹是結(jié)點的有限集合T: 若T非空,則: 有一個特別標出的結(jié)點,稱作該樹的 根 ,記為root(T); 其余結(jié)點分成若干個不相交的非空集合T1, T2, …, Tm (m0),其中T1, T2, …, Tm又都是樹,稱作root(T)的 子樹 。 T 空時為空樹,記作root(T)=NULL。 有序樹、無序樹 ??如果子樹T1, T

    2024年02月05日
    瀏覽(18)
  • 數(shù)據(jù)結(jié)構(gòu)——二叉樹的鏈式結(jié)構(gòu)

    數(shù)據(jù)結(jié)構(gòu)——二叉樹的鏈式結(jié)構(gòu)

    ? 個人主頁 : 日刷百題 系列專欄 : 〖C語言小游戲〗〖Linux〗〖數(shù)據(jù)結(jié)構(gòu)〗 ?〖C語言〗 ?? 歡迎各位 → 點贊 ??+ 收藏 ??+ 留言 ??? ? 這里我們使用先序遍歷的思想來創(chuàng)建二叉樹,這里的內(nèi)容對于剛接觸二叉樹的朋友可能有些難理解,不妨先看完下面的二叉樹各種遍歷

    2024年02月05日
    瀏覽(31)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的鏈式結(jié)構(gòu)

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的鏈式結(jié)構(gòu)

    學習鏈式二叉樹要知道三種遍歷方式,便于對二叉樹的節(jié)點以及左子樹和右子樹進行操作。 前序遍歷:根、左子樹、右子樹 中序遍歷:左子樹、根、右子樹 后序遍歷:左子樹、右子樹、根 以下圖為例: 得到的結(jié)果: 前序遍歷:1 2 3 4 5 6 中序遍歷:3 2 1 5 4 6 后序遍歷:3 2

    2024年02月08日
    瀏覽(29)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包