數據結構(C):樹的概念和二叉樹初見

目錄

🍺0.前言

1.樹概念及結構

2.認識一棵樹

?3.樹的表示

3.1樹在實際中的運用(表示文件系統的目錄樹結構)?

4.二叉樹?

4.1特殊的二叉樹?

4.2二叉樹的性質

💎5.結束語


🍺0.前言

? ? ? ? 言C之言,聊C之識,以C會友,共向遠方。各位博友的各位你們好啊,這里是持續分享數據結構知識的小趙同學,今天要分享的數據結構知識是樹的概念和二叉樹,在這一章,小趙將會向大家展開聊聊樹的概念和二叉樹。?

1.樹概念及結構

樹是一種非線性的數據結構,它是由n(n>=0)個有限結點組成一個具有層次關系的集合。把它叫做樹是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。

有一個特殊的結點,稱為根結點,根節點沒有前驅結點

除根節點外,其余結點被分成M(M>0)個互不相交的集合T1、T2、……、Tm,其中每一個集合Ti(1<= i <= m)又是一棵結構與樹類似的子樹。每棵子樹的根結點有且只有一個前驅,可以有0個或多個后繼

因此,樹是遞歸定義的。

這個定義其實看起來也是很耐看的,如果我們看這個去學習二叉樹,我感覺還是很有難度,那么下面小趙就用自己的語言來說一下什么叫樹。

先看一下現實中的樹:

我們現實中的樹往往是長成這樣,我們可以這樣想一下就是這個根就好像是我們的磁盤,然后每個樹根就好像是我們的文件夾,而每個文件里面又是不同的文件夾,這或許就是一個很好的樹的概念,這樣我們也能發現就是我們的樹的結構在我們的計算機中是極其常見的。?至于上面所說的根節點,遞歸實現等,小趙會在下面和大家一一聊到。

樹狀結構:

當然這里還有一個特別要注意的地方即:樹形結構中,子樹之間不能有交集,否則就不是樹形結構?。

2.認識一棵樹

其實認識一個全新的東西就好像是認識全新的物質,我們要知道他長什么樣子,他的每個部位叫什么,那么我們要想認識一棵樹也是一樣,那么下面我們就來感受一下這棵龐大的樹結構。

子樹:我們在樹結構里的命名是很像我們人類的家族一樣的,最上面一層的就好像是我們的祖先,那么子的意思其實就很像兒女的意思,那么對于A的兒女就是BCDEFG而不包含下面的那些HIJK等因為那些已經跨過了子了。

節點的度:一個節點含有的子樹的個數稱為該節點的度; 如上圖:A的為6

葉節點或終端節點(也就是這棵樹的最后):度為0的節點稱為葉節點; 如上圖:B、C、H、I...等節點為葉節點

非終端節點或分支節點:度不為0的節點; 如上圖:D、E、F、G...等節點為分支節點

雙親節點或父節點:若一個節點含有子節點,則這個節點稱為其子節點的父節點; 如上圖:A是B的父節點

孩子節點或子節點:一個節點含有的子樹的根節點稱為該節點的子節點; 如上圖:B是A的孩子節點

兄弟節點:具有相同父節點的節點互稱為兄弟節點; 如上圖:B、C是兄弟節點

樹的度:一棵樹中,最大的節點的度稱為樹的度; 如上圖:樹的度為6

節點的層次:從根開始定義起,根為第1層,根的子節點為第2層,以此類推

樹的高度或深度:樹中節點的最大層次; 如上圖:樹的高度為4(用家族的感覺就是這個家族有幾代人)

堂兄弟節點:雙親在同一層的節點互為堂兄弟;如上圖:H、I互為兄弟節點

節點的祖先:從根到該節點所經分支上的所有節點;如上圖:A是所有節點的祖先

子孫:以某節點為根的子樹中任一節點都稱為該節點的子孫。如上圖:所有節點都是A的子孫

森林:由m(m>0)棵互不相交的樹的集合稱為森林;

?3.樹的表示

樹結構相對線性表就比較復雜了,要存儲表示起來就比較麻煩了,既然保存值域,也要保存結點和結點之間 的關系,實際中樹有很多種表示方式如:雙親表示法,孩子表示法、孩子雙親表示法以及孩子兄弟表示法 等。我們這里就簡單的了解其中最常用的孩子兄弟表示法。

typedef int Datatype;
struct node
{struct node* leftchild;//左孩子(左子樹)struct node* rightchild;//右孩子(右子數)Datatype data;//當前節點存的數據
};

結構圖:?

3.1樹在實際中的運用(表示文件系統的目錄樹結構)?

樹在我們計算機中的應用其實感覺和我們之前講過的文件夾差不多,這里小趙給的是我們的linux的樹狀目錄結構

4.二叉樹?

我們在目前的學習中發現樹很大,很雜很多的支架,但我們今天是要學習肯定不是一個這么龐大的東西,因為太復雜了,也不好控制,所以我們今天要具體的去研究一個特殊的樹,這個樹就是二叉樹。是一種非常完美的樹,就像是我們的正方形一樣好看。

現實中二叉樹的樣子:

我們發現這樣的樹在現實生活還是非常少的,所以見到這樣的樹,我們程序員還是非常激動的,畢竟它占據了我們數據結構中非常重要的一部分。

二叉樹的概念:

一棵二叉樹是結點的一個有限集合,該集合:

1. 或者為空

2. 由一個根節點加上兩棵別稱為左子樹和右子樹的二叉樹組成

圖形:

從上圖可以看出:

1. 二叉樹不存在度大于2的結點

2. 二叉樹的子樹有左右之分,次序不能顛倒,因此二叉樹是有序樹?

注意:對于任意的二叉樹都是由以下幾種情況復合而成的:

4.1特殊的二叉樹?

1.?滿二叉樹:一個二叉樹,如果每一個層的結點數都達到最大值,則這個二叉樹就是滿二叉樹。也就是 說,如果一個二叉樹的層數為K,且結點總數是 ,則它就是滿二叉樹。

說的更簡單一點就是滿了,沒有空的。除了葉節點其他都有兩個孩子。

2.完全二叉樹:完全二叉樹是效率很高的數據結構,完全二叉樹是由滿二叉樹而引出來的。對于深度為K 的,有n個結點的二叉樹,當且僅當其每一個結點都與深度為K的滿二叉樹中編號從1至n的結點一一對 應時稱之為完全二叉樹。 要注意的是滿二叉樹是一種特殊的完全二叉樹。

看了這個其實我還是蠻暈的,但是換個說法可能就好理解一點,就是每棵樹首先一定只能有兩個子樹,那么就像是我們寫字一樣從左往右寫每一行,不能中間留空,中間留一個空擋就不是完全二叉樹,因為完全二叉樹對左右還是非常敏感的。

4.2二叉樹的性質

這里的絕大部分結論是我們可以用數學直接算出來的,這里小趙主要聊聊第三個結論。

首先是當我們只有一個根節點,然后我們開始給它一點一點節點:

各位看這個圖的時候會發現,我們在增加度為1的節點的時候好像度為零的節點的個數始終沒有變過都是一個,可能我們會覺得好像沒什么關系,好我們接著往下。

?這個時候我們把度為1的節點變為度為二的時候我們的發現每增加一個度為二就會增加一個度為零,所以結論就很明顯了。度為二的節點誕生一個,度為零的節點就增加一個,再加上原本的度為零的點,那么度為零的節點就等于度為二的節點的個數加一。

💎5.結束語

好了小趙今天的分享就到這里了,如果大家有什么不明白的地方可以在小趙的下方留言哦,同時如果小趙的博客中有什么地方不對也希望得到大家的指點,謝謝各位家人們的支持。你們的支持是小趙創作的動力,加油。

如果覺得文章對你有幫助的話,還請點贊,關注,收藏支持小趙,如有不足還請指點,小趙及時改正,感謝大家支持!!!

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

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

相關文章

卷積模型的剪枝、蒸餾---蒸餾篇--NST特征蒸餾(以deeplabv3+為例)

本文使用NST特征蒸餾實現deeplabv3+模型對剪枝后模型的蒸餾過程; 一、NST特征蒸餾簡介 下面是兩張疊加了熱力圖(heat map)的圖片,從圖中很容易看出這兩個神經元具有很強的選擇性:左圖的神經元對猴子的臉部非常敏感,右側的神經元對字符非常敏感。這種激活實際上意味著神經…

程序員績效管理-序言

開辟一個新專欄專門討論程序員績效管理。作為軟件開發企業&#xff0c;公司的命脈掌握在程序員手中。程序員的績效管理是個超級難題。小張和老王專欄介紹了兩個典型的人員。但是這是兩個虛擬的極端人員&#xff0c;大部分開發人員沒有那么容易分辨。1個任務&#xff0c;應該1天…

LabVIEW軟件開發工程師需要具備哪些能力與素質?

成為一名優秀的LabVIEW軟件開發工程師&#xff0c;需要具備以下能力與素質&#xff1a; 技術能力 LabVIEW編程技能&#xff1a; 精通LabVIEW編程&#xff0c;能夠熟練使用其圖形化編程界面。熟悉LabVIEW中的各種功能模塊和工具包&#xff0c;如數據采集&#xff08;DAQ&#x…

如何配置Nacos的健康檢查參數?

在微服務架構中&#xff0c;服務注冊與發現以及健康檢查是至關重要的組件。Nacos&#xff0c;作為阿里巴巴開源的一個更易于構建云原生應用的動態服務發現、配置和服務管理平臺&#xff0c;廣泛應用于微服務架構中。在Nacos中&#xff0c;服務的健康檢查是一個核心功能&#xf…

【Python】使用MySQL綜合案例

數據說明: 一月份各省銷售數據&#xff1a;csv格式 二月份各省銷售數據&#xff1a;json格式 實現要求&#xff1a;將兩個文件中的數據存儲到數據庫中&#xff0c;并反向從數據庫中讀取數據存儲為json格式文件 本文提供數據 完成案例所需基礎 【Python】基礎知識(函數與數…

C++ 日志庫 log4cpp 編譯、壓測及其范例代碼 [全流程手工實踐]

文章目錄 一、 log4cpp官網二、下載三、編譯1.目錄結構如下2.configure 編譯3.cmake 編譯 四、測試五、壓測源碼及結果1.運行環境信息2.壓測源碼3.壓測結果 文章內容&#xff1a;包含了對其linux上的完整使用流程&#xff0c;下載、編譯、安裝、測試用例嘗試、以及一份自己寫好…

Qt | QTimer 類(計時器)

01、相關知識回顧 Qt C++ | QTimer經驗總結Qt | QDateTimeEdit、QDateEdit類和QTimeEdit類02、QTimer 類 1、QTimer 類是 QObejct 的直接子類,該類用于實現計時器,QTimer 類未繼承自 QW

IT革新狂潮:引領未來的技術趨勢

方向一&#xff1a;技術革新與行業應用 當前現狀&#xff1a; 量子計算&#xff1a;量子計算的研究正在加速&#xff0c;盡管目前仍處于初級階段&#xff0c;但其在藥物研發、加密技術和材料科學等領域的應用潛力已被廣泛認可。 虛擬現實&#xff08;VR&#xff09;與增強現實…

湖南大學OS-2018期末考試(不含解析)

前言 不知道哪里翻出來的一張&#xff0c;看著確實像期末考卷&#xff0c;暫且放一下。或許做過&#xff0c;或許沒做過。 總之答案不記得了。做完可以評論區發一下或者找我發出來。 共6道大題。 一、(30%) 1. &#xff08;6%&#xff09; 進程間通信的兩種方法分別是什么&…

完成所有任務的最少時間 - (LeetCode)

前言 今天也是很無精打采的一天&#xff0c;早上看到這道題&#xff0c;都有點懵逼&#xff0c;開始也不懂如何入手&#xff0c;既然自己搞不定&#xff0c;就順便測試了一下AI吧&#xff0c;測試了通義千問和文心一言&#xff0c;把題目拿去那里問&#xff0c;可以把解題思路…

DRF 跨域問題

【一】說明 CORS&#xff08;跨來源資源共享&#xff0c;Cross-Origin Resource Sharing&#xff09;是一種瀏覽器技術的規范&#xff0c;旨在解決瀏覽器同源策略&#xff08;Same-Origin Policy&#xff09;的限制&#xff0c;使得Web服務可以從不同的網域&#xff08;源&…

error Error: certificate has expired

用yarn命令安裝依賴的時候遇到報錯&#xff1a; 原因&#xff1a;可能是開了服務器代理訪問導致ssl安全證書失效 解決方法&#xff1a; 在終端輸入 yarn config set "strict-ssl" false -g yarn config set "strict-ssl" false -g 然后再安裝依賴就不…

RS2227XN功能和參數介紹及PDF資料

RS2227XN是一款模擬開關/多路復用器 品牌: RUNIC(潤石) 封裝: MSOP-10 描述: USB2.0高速模擬開關 開關電路: 雙刀雙擲(DPDT) 通道數: 2 工作電壓: 1.8V~5.5V 導通電阻(RonVCC): 10Ω 功能&#xff1a;模擬開關/多路復用器 USB2.0高速模擬開關 工作電壓范圍&#xff1a;1.8V ~ 5…

Linux運行級別介紹

unlevel 運行級別 cat /etc/inittab 0 - halt (Do NOT set initdefault to this) --關機 1 - Single user mode --單用戶(進入單用戶不需要帳號與密碼) 2 - Multiuser, without NFS (The same as 3, if you do not have networking) 多用戶&#xff08;沒有網絡&#xff09; 3…

Java基礎篇常見面試問題總結

文章目錄 1. 你是怎樣理解 OOP面向對象?2. 重載與重寫區別3. 接口與抽象類的區別4. 深拷貝與淺拷貝的理解5. 什么是自動拆裝箱&#xff1f; int和 Integer有什么區別6. 和 equals()區別7. String類 能被繼承嗎為什么用 final修飾8. final、finally、finalize區別 1. 你是怎樣理…

【C語言】6.C語言VS實用調試技巧(1)

文章目錄 1.什么是 bug2.什么是調試&#xff08;debug&#xff09;&#xff1f;3.Debug 和 Release4.VS調試快捷鍵4.1 環境準備4.2 調試快捷鍵 5.監視和內存觀察5.1 監視5.2 內存 1.什么是 bug bug現在一般是指在電腦系統或程序中&#xff0c;隱藏著的一些未被發現的缺陷或問題…

Git使用(3):版本管理

一、查看歷史 編寫一個java類進行測試 選擇Git -> Show Git Log查看日志。 第一次修改推送到遠程倉庫了&#xff0c;所以有origin&#xff08;遠程倉庫地址&#xff09;&#xff0c;第二次修改只提交到本地倉庫所以沒有。 二、版本回退 1、本地回退 在要回退的版本上右鍵&a…

XLSX文件刪除了怎么找回?8個恢復方法,太實用了!

U盤作為一種便攜的存儲設備&#xff0c;隨之而來的數據丟失問題也讓人頭疼。尤其是當U盤中的XLSX文件&#xff08;Excel 2007及以后版本的默認文件格式&#xff09;被誤刪除或丟失時&#xff0c;如何高效找回這些數據成為了許多人關注的焦點。 本文將從XLSX文件的特性、U盤格式…

C++set關聯式容器

Cset 1. 關聯式容器 vector、list、deque、forward_list(C11)等STL容器&#xff0c;其底層為線性序列的數據結構&#xff0c;里面存儲的是元素本身&#xff0c;這樣的容器被統稱為序列式容器。而map、set是一種關聯式容器&#xff0c;關聯式容器也是用來存儲數據的&#xff0…

深度盤點在當今經濟形勢下資深項目經理或PMO的或去或從

在當今經濟形勢下&#xff0c;資深項目經理&#xff08;Project Manager&#xff09;或項目管理辦公室&#xff08;PMO&#xff09;的去向和選擇受到多種因素的影響。以下是對他們可能面臨的或去或從的深度盤點&#xff1a; 1、發展去向 1. 深化專業領域&#xff1a;在經濟形勢…