數據結構——二叉樹知識點詳解!

引言:本篇博客將詳細介紹到數據結構中的又一位大將——二叉樹。它也是我們目前學到的第一個非線性的數據結構。并且本章將學到的概念居多,希望大家可以理解并牢記。

更多有關C語言和數據結構知識詳解可前往個人主頁:計信貓

目錄

一,樹

1,樹的概念

2,樹的定義

二,二叉樹

1,二叉樹的概念

2,特殊的二叉樹

Ⅰ ,滿二叉樹

Ⅱ,完全二叉樹

3,二叉樹的儲存

三,結語


一,樹

1,樹的概念

? ? ? ? 是一種非線性的數據結構,它由n(n>=0)個有限節點組成一個具有層次關系的集合。而在形式上就像一個倒掛的樹,根在上,葉在下。如下圖,就是一棵樹:

? ? ? ? 想要真正的了解一棵,那我們還應該繼續掌握關于的細枝末節的概念知識。?

父節點/雙親節點? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?子節點/孩子節點

節點的度:某節點所含有的子節點的個數。例如A的度就為2

兄弟節點:具有相同父節點的節點。如B,C就為兄弟節點

葉節點/終端節點:子節點為0的節點。如D,E,F,G,H

堂兄弟節點:父節點處于同一層上的節點。

樹的度:所包含的節點中的的最大值。例如這棵樹的度就為3

樹的高度:樹的最大層次(深度)。例如這棵樹的高度就為3

森林:互不相交的的集合。

? ? ? ? 當然,我們也會遇到兩棵比較特殊的,如下:

?此時空樹高度就為0,只有根節點的樹高度就為1。

? ? ? ? 想要成為一棵,也需要同時遵守以下規則:

1,子樹之間便可以有相連或者相交的情況出現。

2,除了根節點以外,每一個節點有且僅有一個父節點。

2,樹的定義

? ? ? ??對于的定義,則存在一個難點,那就是一個節點的子節點的個數不確定性,導致我們不知道該定義多少個指針變量合適。

? ? ? ? 但是,我們可以使用一個方法,叫做左孩子右兄弟定義法來完美地解決這個問題。于是我們如下代碼定義一個

struct TreeNode
{int val;struct TreeNode* LeftChild;//左孩子struct TreeNode* RightBrother;//右兄弟
};

? ? ? ? 所以有了這個方法,我們就可以很輕松地將如下的使用代碼進行表示了。

? ? ? ? 而在使用此方法時,我們必須確保左孩子一定是每一層最左邊的那一個。于是我們便可以使用如下代碼來遍歷一棵的某一層。

struct TreeNode*cur=parent->LeftChild;//parent表示根節點
while(cur)
{//……cur=cur->RightBrother;
}

二,二叉樹

1,二叉樹的概念

? ? ? ? 二叉樹無非本質上就首先是一棵,所以它擁有的全部概念。其次二叉樹的特殊之處就是二叉樹的度為2,也就是說一個節點子節點數不可以超過2

那么如下,就是一棵二叉樹

? ? ???

2,特殊的二叉樹

Ⅰ ,滿二叉樹

? ? ? ? 滿二叉樹的定義就是除了葉節點之外,每一個節點都達到含有了兩個子節點二叉樹。如下圖所示:

? ? ? ? 倘若滿二叉樹的高度為H,那么我們便可以計算出它的節點個數:

Ⅱ,完全二叉樹

? ? ? ? 完全二叉樹則要求,前H-1層滿二叉樹,最后一層的葉節點從左向右連續。如下圖所示:

? ? ? ? 而所要求的”連續“的意思其實就是從左到右必須葉節點緊挨著葉節點,不可以有空出來的位置。

那我們舉出如下反例,便不是完全二叉樹:

3,二叉樹的儲存

? ? ? ? 對于二叉樹的儲存,我們便是將邏輯結構與物理結構進行分離儲存。

邏輯結構:樹狀結構? ? ? ? ? ? ??

物理結構:數組結構

? ? ? ? 利用數組儲存二叉樹數據的好處就是我們可以使用下標找到某個節點的父節點或者子節點。?

通過下標尋找父/子節點

假設父節點的下標為i:左孩子節點的下標為2*i+1右孩子節點下標為2*i+2

假設子節點的下標為j:不管j為奇數或者偶數,其父節點的下標都為(j-2)/2——因為會涉及到int類型取整操作

注意:若為非完全二叉樹,則不存在的節點一定要在數組空出來,不然會導致使用下標尋找父子節點的方法失效

三,結語

? ? ? ? 這一篇文章也僅僅只是講到了二叉樹的概念而已,接下來我會盡快更新出二叉樹數據結構的應用——堆

? ? ? ? 相較于我們以前學到的數據結構就更加的復雜難懂了,如果想要看懂,那么將這篇博客所講到的知識點,尤其是父子節點下標的尋找爛熟于心就是非常重要的了。希望我們可以一起克服我們所遇到的困難,一起加油!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12817.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12817.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12817.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AIGC行業現在適合進入嗎

AIGC行業目前正處于快速發展階段,市場需求正處于爆發期,上大學網(www.sdaxue.com)認為,對于有興趣的個人或企業而言,現在可能是一個適合進入的時機,以下是具體的分析,供大家參考! 一、AIGC行業前…

網絡安全基礎知識

目錄 1、什么是防火墻?什么是堡壘主機?什么是DMZ? 2、網絡安全的本質是什么? 3、計算機網絡安全所面臨的威脅分為哪幾類?從人的角度,威脅網絡安全的因素有哪些? 4、網絡攻擊和防御分別包括那…

zip file is empty

從下找到報錯的jar包。展開這個jar包,看下是否正常,正常的是能夠展開看到一些文件夾以及里面的類,如下:如果不正常,就刪除這個jar包,同時找到這個jar包在本地maven倉庫的地址,也刪除掉&#xff…

string類實現

目錄 string類實現 1.構造函數(三種) 2.c_str()函數 3.operator[] 重載 4.size()函數實現 5.迭代器 6.reserve()函數實現 7.push_back()函數實現 8.append()函數實現 9.operator實現 10.insert() 實現 11.erase()函數實現 12.find()函數實現…

Chrome 瀏覽器的常用命令包括

Chrome 瀏覽器的常用命令包括: 1. **新建標簽頁**:Ctrl T (在 Windows/Linux 下),Command T (在 macOS 下)。 2. **關閉當前標簽頁**:Ctrl W (在 Windows/Linux 下&…

Java面試八股之Collection和Collections的區別

Java中Collection和Collections的區別 Collection 是一個接口,位于 java.util 包中,它是 Java 集合框架的頂層接口之一,代表了一組對象的集合。Collection 接口定義了所有集合類型(如 List、Set、Queue 等)所共有的基…

LeetCode2352相等行列對

題目描述 給你一個下標從 0 開始、大小為 n x n 的整數矩陣 grid ,返回滿足 Ri 行和 Cj 列相等的行列對 (Ri, Cj) 的數目。如果行和列以相同的順序包含相同的元素(即相等的數組),則認為二者是相等的。 解析 針對題目給出的數量級…

cubemx配置stm32f407VET6實現can通信

背景: 項目上需要把原先的TMC5160電機驅動器替換為購買的電機控制模塊(該模塊采用canopen通信) 移植canopen的前提是can通信正常,現在添加一下can通信(先用標準幀,250K bit/S的波特率測試) 原理…

個人學習計劃

vue前端(一周) 05/14 - 05/19 Html、css復習、vue基礎復習、axios復習 05/14 ElementUI學習 05/15 JWT集成驗證碼、token 05/16 vue-route多角色登錄 05/17 增刪查改、文件下載 05/18 Echart餅狀圖 05/19 📌 附加學習: 父子傳值三…

其它高階數據結構②_圖(概念+存儲+遍歷+最小生成樹)

目錄 1. 圖的概念 2. 圖的存儲結構 2.1 鄰接矩陣(后面算法所用) 2.2 鄰接表 3. 圖的遍歷 3.1 BFS廣度優先遍歷 3.2 DFS深度優先遍歷 4. 最小生成樹 4.1 Kruskal算法 4.2 Prim算法 本篇完。 1. 圖的概念 圖是由頂點集合及頂點間的關系組成的一…

重磅!麒麟信安發布CentOS安全加固套件

CentOS Linux 7系統即將在6月30日停服,標志CentOS全部停止更新和維護。黨政、金融、能源、通信、交通、公共服務等關鍵信息基礎設施領域已經投運使用的CentOS系統將無法獲取官方提供的漏洞修復補丁,此后,CentOS系統將面臨巨大的安全風險與危害…

【運維項目經歷|003】:Nginx集群化運維升級項目

目錄 項目名稱 項目背景 項目目標 項目成果 我的角色與職責 我主要完成的工作內容 本次項目涉及的技術 本次項目遇到的問題與解決方法 本次項目中可能被面試官問到的問題 問題1:為什么選擇nginx-1.25.4版本,nginx官方最新版本是哪一個版本&…

河南廣電與LiblibAI簽署戰略合作協議

5月15日,河南廣電科技與LiblibAI戰略簽約儀式在鄭州中原福塔新聞發布廳隆重舉行。雙方將本著“共商、共享、共建、共贏”原則,基于全面、可持續的戰略合作伙伴關系,發揮各自優勢,共同聚焦生成式AI領域,圍繞內容創作、商…

CPU占用率過高排查

CPU占用率高是設備本身的一種現象,直觀表現為display cpu-usage命令查詢結果中整機CPU占用率“CPU usage”偏高,如超過70%。在網絡運行中CPU高常常會導致其他業務異常,如BGP震蕩、VRRP頻繁切換、甚至設備無法登錄。 通常,整機CPU占…

Java基礎教程 - 7 面向對象-1

更好的閱讀體驗:點這里 ( www.doubibiji.com ) 更好的閱讀體驗:點這里 ( www.doubibiji.com ) 更好的閱讀體驗:點這里 ( www.doubibiji.com ) 7 面向對象 面向對象&am…

無人售貨奶柜:掘金新零售藍海,

無人售貨奶柜:掘金新零售藍海, 在日新月異的商業浪潮中,無人奶柜猶如一股清新的創業颶風,正以不可阻擋之勢吸引著眾多創業者的目光。這股新興力量以其獨到之處和龐大的市場藍海,預示著一場關于健康、便捷消費方式的深…

【C#】DateTime類型數組含有null?并排序

代碼 internal class Program{static void Main(string[] args){List<DateTime?> dateTimes new List<DateTime?> { null,DateTime.MinValue,DateTime.MaxValue};var temp new List<DateTime?> { };dateTimes.Sort();//dateTimes.Reverse();foreach (va…

石碑之謎:滾動機關

描述 在蒙德和璃月的邊界地帶&#xff0c;有一個被遺忘的神廟&#xff0c;里面有一個奇怪的機關&#xff1a;滾動石碑。小熊必須操作這個112的長方體石碑&#xff0c;使其通過不同的地面環境&#xff0c;最終放置到神秘的符號“O”上&#xff0c;以解開通往寶藏的大門。 石碑…

Edwards愛德華PHM3000培訓PPT課件內容可見圖片詳情

Edwards愛德華PHM3000培訓PPT課件內容可見圖片詳情

golang encoding/json 使用基礎

json 與 encoding/json JSON&#xff08;JavaScript Object Notation&#xff09;是一種輕量級的數據交換格式&#xff0c;它基于 ECMAScript&#xff08;歐洲計算機協會制定的js規范&#xff09;的一個子集&#xff0c;采用完全獨立于語言的文本格式來存儲和表示數據。簡潔和…