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

C語言中關(guān)于樹和二叉樹的相關(guān)概念

 更新時(shí)間:2023年02月14日 11:14:34   作者:[Pokemon]大貓貓  
這篇文章主要介紹了Java?數(shù)據(jù)結(jié)構(gòu)之樹和二叉樹相關(guān)資料,文中通過示例代碼和一些相關(guān)題目來做介紹,非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

樹是一種 非線性的 數(shù)據(jù)結(jié)構(gòu),由 n(n >= 0) 個(gè) 有限節(jié)點(diǎn) 組成一種 具有層次關(guān)系 的集合

一、樹

樹的結(jié)構(gòu)可以遞歸定義為:

根節(jié)點(diǎn)除根節(jié)點(diǎn)之外,其余節(jié)點(diǎn)被分成 M(M >= 0) 個(gè)互不相交的集合,每個(gè)集合分別是一棵子數(shù)

0 個(gè)結(jié)點(diǎn)的樹就稱為空樹

  • 樹中除 根節(jié)點(diǎn)沒有前驅(qū)節(jié)點(diǎn) 之外,其余每個(gè)節(jié)點(diǎn)都 有且僅有一個(gè)前驅(qū)節(jié)點(diǎn),因此 n 個(gè)節(jié)點(diǎn)的樹有 n - 1 條邊
  • 樹中 每個(gè)節(jié)點(diǎn) 都可以 有 0 個(gè)或多個(gè)后繼節(jié)點(diǎn)

樹的相關(guān)概念

  • 節(jié)點(diǎn)的度:節(jié)點(diǎn)含有的 子樹個(gè)數(shù),如圖中 A 節(jié)點(diǎn)的度為 3
  • 葉節(jié)點(diǎn)或終端節(jié)點(diǎn):節(jié)點(diǎn)的 度為 0,如圖中 E、F、G、H、I
  • 分支節(jié)點(diǎn)或非終端節(jié)點(diǎn):節(jié)點(diǎn)的 度不為 0,如圖中 A、B、C、D
  • 父節(jié)點(diǎn)或雙親節(jié)點(diǎn):若一個(gè)節(jié)點(diǎn)含有子節(jié)點(diǎn),則這個(gè)節(jié)點(diǎn)稱為其子節(jié)點(diǎn)的父節(jié)點(diǎn),如圖中 B 是 E 和 F 的父節(jié)點(diǎn)
  • 子節(jié)點(diǎn)或孩子節(jié)點(diǎn):若一個(gè)節(jié)點(diǎn)含有子樹,子樹的根節(jié)點(diǎn) 稱為該節(jié)點(diǎn)的子節(jié)點(diǎn),如圖中 E 和 F 都是 B 的子節(jié)點(diǎn)
  • 兄弟節(jié)點(diǎn):父節(jié)點(diǎn)相同 的節(jié)點(diǎn)互為兄弟節(jié)點(diǎn),如圖中 E 和 F 互為兄弟節(jié)點(diǎn)
  • 樹的度:樹中所有節(jié)點(diǎn)的度中的最大值,如圖中 A 節(jié)點(diǎn)的度為 3,是樹中所有節(jié)點(diǎn)的度中的最大值,即樹的度為 3
  • 節(jié)點(diǎn)的層次:如上圖,從根節(jié)點(diǎn)開始定義為第一層,根節(jié)點(diǎn)的子節(jié)點(diǎn)為第二層 …,(將根節(jié)點(diǎn)層次定義為 0 也是可以的)
  • 樹的高度或深度:樹中節(jié)點(diǎn)的最大層次,圖中為樹的高度為 3
  • 堂兄弟節(jié)點(diǎn):父節(jié)點(diǎn)在同一層次的結(jié)點(diǎn),如圖中 E、F、G、H、I 結(jié)點(diǎn)互為堂兄弟節(jié)點(diǎn)
  • 節(jié)點(diǎn)的祖先:根節(jié)點(diǎn)到該節(jié)點(diǎn)路徑上的所有節(jié)點(diǎn), A、B 結(jié)點(diǎn)是 E 的祖先
  • 子孫:以某節(jié)點(diǎn)為根的子樹中任一節(jié)點(diǎn) 都稱為該節(jié)點(diǎn)的子孫,如上圖:所有節(jié)點(diǎn)都是 A 的子孫

森林:由 M(M > 0) 棵 互不相交的樹 構(gòu)成的集合,將上圖中 A 節(jié)點(diǎn)去掉后,便構(gòu)成由以 B、C、D 為根節(jié)點(diǎn)的三顆樹構(gòu)成的森林

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

在樹的結(jié)構(gòu)中可以發(fā)現(xiàn),樹是不易于用數(shù)組來存儲(chǔ)的,因此 采用鏈?zhǔn)降姆绞絹泶鎯?chǔ)樹

結(jié)構(gòu)1:

由于樹的結(jié)構(gòu)中 每個(gè)節(jié)點(diǎn)的孩子個(gè)數(shù)是不確定的,因此每個(gè)節(jié)點(diǎn)需要使用一個(gè)順序表存儲(chǔ)孩子的指針

typedef int TreeDataType;
typedef struct TreeNode
{
	TreeDataType data;
	SeqList childs;	//順序表,并且每個(gè)元素的類型是 struct TreeNode*
}TreeNode;

結(jié)構(gòu)2:

孩子兄弟表示法:節(jié)點(diǎn)的第一個(gè)孩子用該節(jié)點(diǎn)中的孩子指針指向,第二個(gè)孩子用該結(jié)點(diǎn)的第一個(gè)孩子結(jié)點(diǎn)的兄弟指針指向,第三個(gè)孩子用該節(jié)點(diǎn)的第二個(gè)孩子結(jié)點(diǎn)的兄弟指針指向…

typedef int TreeDataType;
typedef struct TreeNode
{
	TreeDataType data;
	struct TreeNode* child;
	struct TreeNode* brother;
}TreeNode;

存儲(chǔ)樹的方法還有雙親表示法,孩子表示法、孩子雙親表示法等,感興趣的讀者可以自行查閱

二、二叉樹

樹中 所有結(jié)點(diǎn)的度都小于等于 2 的樹,即樹的度小于等于 2 的樹,稱為二叉樹

在二叉數(shù)中子樹有左右區(qū)分,次序不能顛倒,左邊的稱為左子樹,右邊的稱為右子樹

二叉樹的遞歸定義為:

  • 根節(jié)點(diǎn)
  • 左子樹和右子樹

左子樹和右子樹可以為空樹,這里的子樹也是一顆二叉樹

二叉樹的性質(zhì)

假定根節(jié)點(diǎn)的層數(shù)為 1

  • 一棵非空二叉樹的第 i 層上最多有 2^(i - 1)個(gè)節(jié)點(diǎn)
  • 深度為 h 的二叉樹的最大節(jié)點(diǎn)數(shù)是 2^h - 1
  • 任何一棵二叉樹,如果度為 0 的葉節(jié)點(diǎn)個(gè)數(shù)為 n0,度為 2 的分支節(jié)點(diǎn)個(gè)數(shù)為 n2,則有 n0 = n2 +1,即度為 0 的節(jié)點(diǎn),比度為 2 的節(jié)點(diǎn)多 1

假設(shè)一顆二叉樹有 n 個(gè)節(jié)點(diǎn),度為 0 的節(jié)點(diǎn)數(shù)為 n0,度為 1 的節(jié)點(diǎn)數(shù)為 n1,度為 2 的節(jié)點(diǎn)數(shù)為 n2,根據(jù) n 個(gè)節(jié)點(diǎn)的二叉樹有 n - 1 條邊,可得到如下關(guān)系:

  • n0 * 0 + n1 * 1 + n2 * 2 = n - 1
  • n0 + n1 + n2 = n

解得:n0 = n2 + 1

滿二叉樹:如果二叉樹中每一個(gè)層的節(jié)點(diǎn)數(shù)都達(dá)到最大值,則這棵二叉樹稱為滿二叉樹

假設(shè)一棵二叉樹的層數(shù)為 K,且節(jié)點(diǎn)總數(shù)是 2^K - 1,則它就是滿二叉樹

完全二叉樹:假設(shè)一顆二叉樹有 K 層,如果這顆二叉數(shù)的前 K - 1 層是滿二叉樹,并且第 K 層是從左往右還是連續(xù)的節(jié)點(diǎn),則這棵二叉樹稱為完全二叉樹

假設(shè)一棵完全二叉樹的層數(shù)為 K ,則完全二叉樹節(jié)點(diǎn)數(shù)的范圍:2^(K - 1) ~ 2^K - 1

完全二叉樹中度為 1 的節(jié)點(diǎn)有 0 個(gè)或 1 個(gè)

滿二叉樹可以認(rèn)為是一種特殊的完全二叉樹

  • 具有 n 個(gè)節(jié)點(diǎn)的 滿二叉樹 的深度 h = log2(n + 1),n 個(gè)節(jié)點(diǎn)的 完全二叉樹 的深度 h = log2(n + 1),h 向上取整(2.1 取 3)

  • 對(duì)于具有 n 個(gè)節(jié)點(diǎn)的 完全二叉樹,按照 從上至下、從左至右 的順序,對(duì)所有節(jié)點(diǎn)從 0 開始依次編號(hào)

由于完全二叉樹中從第二層開始,每一層的結(jié)點(diǎn)都是偶數(shù)個(gè),因此 左孩子的編號(hào)都均為奇數(shù),右孩子的編號(hào)都均為偶數(shù)

在 n 個(gè)節(jié)點(diǎn)的 完全二叉樹 中,對(duì)于合法的編號(hào)為 i 的節(jié)點(diǎn)有:

  • i 節(jié)點(diǎn)的 左孩子 的編號(hào)為 2 * i + 1,如果 2 * i + 1 < n,表示沒有左孩子
  • i 節(jié)點(diǎn)的 右孩子 的編號(hào)為 2 * i + 2,如果 2 * i + 2 < n,表示沒有右孩子
  • 根據(jù) 1 和 2 可知 i 節(jié)點(diǎn)的 父節(jié)點(diǎn) 的編號(hào)為 (i - 1) / 2,如果 i = 0,表示為根節(jié)點(diǎn),沒有父節(jié)點(diǎn)

到此這篇關(guān)于C語言中關(guān)于樹和二叉樹的相關(guān)概念的文章就介紹到這了,更多相關(guān)C語言樹和二叉樹內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中函數(shù)重載與引用的操作方法

    C++中函數(shù)重載與引用的操作方法

    C++中函數(shù)重載允許同名函數(shù)根據(jù)參數(shù)列表的不同而執(zhí)行不同的功能,這依賴于名字修飾或名字改編(Name Mangling)機(jī)制,而引用則是為變量創(chuàng)建一個(gè)別名,不會(huì)開辟新的內(nèi)存空間,本文介紹了C++中函數(shù)重載與引用的操作,感興趣的朋友一起看看吧
    2024-10-10
  • C++實(shí)現(xiàn)并查集

    C++實(shí)現(xiàn)并查集

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)并查集,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C++核心編程之類和對(duì)象詳解

    C++核心編程之類和對(duì)象詳解

    這篇文章主要介紹了C++編程進(jìn)階之類和對(duì)象用法等相關(guān)使用技巧,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • 淺析C語言中的setjmp與longjmp函數(shù)

    淺析C語言中的setjmp與longjmp函數(shù)

    以下是對(duì)C語言中的setjmp與longjmp函數(shù)進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下
    2013-09-09
  • C++實(shí)現(xiàn)LeetCode(68.文本左右對(duì)齊)

    C++實(shí)現(xiàn)LeetCode(68.文本左右對(duì)齊)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(68.文本左右對(duì)齊),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++中的自增與自減

    C++中的自增與自減

    這篇文章主要介紹了C++中的自增與自減,自增與自減是C++當(dāng)中兩個(gè)使用頻率非常高的運(yùn)算符,不僅在循環(huán)當(dāng)中用到,在日常的代碼當(dāng)中也經(jīng)常使用,下面來看看文章得具體介紹
    2021-11-11
  • 詳解C++11中的類型推斷

    詳解C++11中的類型推斷

    C++11中為了更好的支持泛型編程,提供了?auto和decltype兩個(gè)關(guān)鍵詞,目的就是提供編譯階段的自動(dòng)類型推導(dǎo),這篇文章主要介紹了C++11中的類型推斷,需要的朋友可以參考下
    2023-01-01
  • C++中的Lambda函數(shù)詳解

    C++中的Lambda函數(shù)詳解

    大家好,本篇文章主要講的是C++中的Lambda函數(shù)詳解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 基于C++實(shí)現(xiàn)五子棋AI算法思想

    基于C++實(shí)現(xiàn)五子棋AI算法思想

    這篇文章主要為大家詳細(xì)介紹了基于C++實(shí)現(xiàn)五子棋AI算法思想,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • C語言編程入門之程序頭文件的簡(jiǎn)要解析

    C語言編程入門之程序頭文件的簡(jiǎn)要解析

    這篇文章主要介紹了C語言編程入門之程序頭文件的簡(jiǎn)要解析,包括頭文件重復(fù)包含問題等方面的說明,需要的朋友可以參考下
    2015-12-12

最新評(píng)論

紫云| 公安县| 雅江县| 兴义市| 新绛县| 玛曲县| 汝南县| 抚松县| 宣威市| 孙吴县| 定安县| 扶沟县| 江城| 吉安市| 托克逊县| 望谟县| 铜陵市| 禄丰县| 铁岭县| 金溪县| 华阴市| 凤城市| 东明县| 丰县| 高唐县| 运城市| 天台县| 浠水县| 永康市| 名山县| 腾冲县| 囊谦县| 牡丹江市| 肇源县| 宜宾市| 会同县| 肥乡县| 酉阳| 吉安县| 肇东市| 锦州市|