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

C語言深入淺出解析二叉樹

 更新時(shí)間:2022年03月30日 15:53:14   作者:雪芙花  
二叉樹可以簡單理解為對于一個(gè)節(jié)點(diǎn)來說,最多擁有一個(gè)上級節(jié)點(diǎn),同時(shí)最多具備左右兩個(gè)下級節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)。本文將詳細(xì)介紹一下C++中二叉樹的實(shí)現(xiàn)和遍歷,需要的可以參考一下

樹概念及結(jié)構(gòu)

樹是一種 非線性 的數(shù)據(jù)結(jié)構(gòu),它是由 n ( n>=0 )個(gè)有限結(jié)點(diǎn)組成一個(gè)具有層次關(guān)系的集合
把它叫做樹是因 為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的

注意:

  • 有一個(gè)特殊的結(jié)點(diǎn),稱為根結(jié)點(diǎn),根節(jié)點(diǎn)沒有前驅(qū)結(jié)點(diǎn)
  • 除根節(jié)點(diǎn)外,其余結(jié)點(diǎn)被分成M(M>0)個(gè)互不相交的集合T1、T2、……、Tm,其中每一個(gè)集合Ti(1<= i <=m)又是一棵結(jié)構(gòu)與樹類似的子樹。每棵子樹的根結(jié)點(diǎn)有且只有一個(gè)前驅(qū),可以有0個(gè)或多個(gè)后繼 因此,樹是遞歸定義的。

如圖:

在這里插入圖片描述

注意:

  • 樹形結(jié)構(gòu)中,子樹之間不能有交集,否則就不是樹形結(jié)構(gòu)
  • 除了根節(jié)點(diǎn)外,每個(gè)節(jié)點(diǎn)有且只有一個(gè)父節(jié)點(diǎn)
  • 一棵樹N個(gè)節(jié)點(diǎn)的樹有N-1條邊

相關(guān)概念

如圖:

在這里插入圖片描述

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

樹的表示

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

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

如圖:

在這里插入圖片描述

樹在實(shí)際中的運(yùn)用(表示文件系統(tǒng)的目錄樹結(jié)構(gòu))

在這里插入圖片描述

二叉樹概念及結(jié)構(gòu)

概念

  • 二叉樹由一個(gè)根節(jié)點(diǎn)加上左子樹和右子樹組成:
  • 二叉樹度最大為2(度可以為0,1,2)
  • 二叉樹的子樹有左右之分,次序不能顛倒(有序樹)(沒有左樹,一定沒有右樹;有左樹,不一定有右樹)

在這里插入圖片描述

需要注意的特殊二叉樹

滿二叉樹:

一個(gè)二叉樹,如果每一個(gè)層的結(jié)點(diǎn)數(shù)都達(dá)到最大值,則這個(gè)二叉樹就是滿二叉樹
也就是說,如果一個(gè)二叉樹的層數(shù)為K,且結(jié)點(diǎn)總數(shù)是2^k-1,則它就是滿二叉樹

完全二叉樹:

完全二叉樹是效率很高的數(shù)據(jù)結(jié)構(gòu),完全二叉樹是由滿二叉樹而引出來的(特殊的完全二叉樹)
對于深度為K的,有n個(gè)結(jié)點(diǎn)的二叉樹,當(dāng)且僅當(dāng)其每一個(gè)結(jié)點(diǎn)都與深度為K的滿二叉樹中編號從1至n的結(jié)點(diǎn)一一對應(yīng)時(shí)稱之為完全二叉樹

二叉樹的性質(zhì)

  • 若規(guī)定根節(jié)點(diǎn)的層數(shù)為 1 ,則一棵非空二叉樹的 第 i 層上最多有2^(i-1)個(gè)結(jié)點(diǎn)
  • 若規(guī)定根節(jié)點(diǎn)的層數(shù)為 1 ,則 深度為 h的二叉樹的最大結(jié)點(diǎn)數(shù)是2^h-1
  • 若規(guī)定根節(jié)點(diǎn)的層數(shù)為1,具有n個(gè)結(jié)點(diǎn)的滿二叉樹的深度,h=log2(n+1)(是log以2為底,n+1為對數(shù))

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

存儲結(jié)構(gòu)類型:

順序存儲

順序結(jié)構(gòu)存儲就是使用 數(shù)組來存儲 ,一般使用數(shù)組只適合表示完全二叉樹(不完全二叉樹有空間的浪費(fèi))而現(xiàn)實(shí)中使用中只有堆才會使用數(shù)組來存儲

注:二叉樹順序存儲在物理上是一個(gè)數(shù)組,在邏輯上是一顆二叉樹

如圖:

在這里插入圖片描述

鏈?zhǔn)酱鎯?/h4>

二叉樹的鏈?zhǔn)酱鎯Y(jié)構(gòu)是指,用鏈表來表示一棵二叉樹,即用鏈來指示元素的邏輯關(guān)系。 通常的方法是
鏈表中每個(gè)結(jié)點(diǎn)由三個(gè)域組成,數(shù)據(jù)域和左右指針域,左右指針分別用來給出該結(jié)點(diǎn)左孩子和右孩子所
在的鏈結(jié)點(diǎn)的存儲地址 。

例:

typedef int BTDataType;
// 二叉鏈
struct BinaryTreeNode
{
    struct BinTreeNode* _pLeft; // 指向當(dāng)前節(jié)點(diǎn)左孩子
    struct BinTreeNode* _pRight; // 指向當(dāng)前節(jié)點(diǎn)右孩子
    BTDataType _data; // 當(dāng)前節(jié)點(diǎn)值域
}
// 三叉鏈
struct BinaryTreeNode
{
 struct BinTreeNode* _pParent; // 指向當(dāng)前節(jié)點(diǎn)的雙親
 struct BinTreeNode* _pLeft; // 指向當(dāng)前節(jié)點(diǎn)左孩子
 struct BinTreeNode* _pRight; // 指向當(dāng)前節(jié)點(diǎn)右孩子
 BTDataType _data; // 當(dāng)前節(jié)點(diǎn)值域
};

總結(jié)

這只是二叉樹的基本知識,之后我們還會詳細(xì)解析二叉數(shù)的遞歸實(shí)現(xiàn)和有關(guān)題目。

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

相關(guān)文章

  • C++實(shí)現(xiàn)二分法求方程近似解

    C++實(shí)現(xiàn)二分法求方程近似解

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)二分法求方程近似解,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C++模擬實(shí)現(xiàn)list功能

    C++模擬實(shí)現(xiàn)list功能

    list的底層是一個(gè)循環(huán)雙向鏈表結(jié)構(gòu),雙向鏈表中每個(gè)元素存儲在互不相關(guān)的獨(dú)立節(jié)點(diǎn)中,在節(jié)點(diǎn)中通過指針指向其前一個(gè)元素和后一個(gè)元素,接下來通過本文給大家分享C++模擬實(shí)現(xiàn)list的示例代碼,需要的朋友可以參考下
    2021-08-08
  • 詳細(xì)分析C++ 信號處理

    詳細(xì)分析C++ 信號處理

    這篇文章主要介紹了C++ 信號處理的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C/C++通過IP獲取局域網(wǎng)網(wǎng)卡MAC地址

    C/C++通過IP獲取局域網(wǎng)網(wǎng)卡MAC地址

    這篇文章主要為大家詳細(xì)介紹了C++如何通過Win32API函數(shù)SendARP從IP地址獲取局域網(wǎng)內(nèi)網(wǎng)卡的MAC地址,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • C/C++整數(shù)乘積的溢出問題的解決

    C/C++整數(shù)乘積的溢出問題的解決

    整數(shù)乘積的溢出問題是指兩個(gè)整數(shù)相乘得到的結(jié)果超過了所能表示的數(shù)據(jù)類型的范圍,本文給大家介紹了C/C++整數(shù)乘積的溢出問題的解決,需要的朋友可以參考下
    2024-02-02
  • 使用OpenGL創(chuàng)建窗口的示例詳解

    使用OpenGL創(chuàng)建窗口的示例詳解

    OpenGL,也就是Open?Graphics?Library。其主要就是用于我們?nèi)ヤ秩?D、3D矢量圖形的一種跨語言、跨平臺的應(yīng)用程序編程接口,這篇文章主要介紹了使用OpenGL創(chuàng)建窗口,需要的朋友可以參考下
    2022-04-04
  • Qt實(shí)戰(zhàn)案例之如何利用QProcess類實(shí)現(xiàn)啟動(dòng)進(jìn)程

    Qt實(shí)戰(zhàn)案例之如何利用QProcess類實(shí)現(xiàn)啟動(dòng)進(jìn)程

    這篇文章主要介紹了Qt實(shí)戰(zhàn)案例之如何利用QProcess類實(shí)現(xiàn)啟動(dòng)進(jìn)程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • 最新VScode C/C++ 環(huán)境配置的詳細(xì)教程

    最新VScode C/C++ 環(huán)境配置的詳細(xì)教程

    這篇文章主要介紹了最新VScode C/C++ 環(huán)境配置的詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • C++關(guān)鍵字thread_local學(xué)習(xí)筆記

    C++關(guān)鍵字thread_local學(xué)習(xí)筆記

    這篇文章主要為大家介紹了C++關(guān)鍵字thread_local學(xué)習(xí)筆記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • C++?OpenCV實(shí)現(xiàn)二維碼檢測功能

    C++?OpenCV實(shí)現(xiàn)二維碼檢測功能

    這篇文章主要介紹了如何利用C++?OpenCV實(shí)現(xiàn)二維碼檢測功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-01-01

最新評論

屯门区| 离岛区| 会同县| 凤山县| 多伦县| 奈曼旗| 昆山市| 得荣县| 玉门市| 云和县| 从化市| 三穗县| 白河县| 南部县| 砀山县| 邹平县| 阳春市| 兰坪| 通化市| 花莲市| 景宁| 讷河市| 苏州市| 布尔津县| 循化| 乡城县| 滨海县| 吴桥县| 隆化县| 奇台县| 白朗县| 中牟县| 康定县| 海城市| 梅州市| 建瓯市| 彩票| 彰化县| 芜湖县| 福鼎市| 柳州市|