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

【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1)

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

序言

讓我們開始二叉樹之前先復(fù)習(xí)回顧下之前學(xué)習(xí)的知識
【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),二叉樹
【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),二叉樹

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

1.1樹的概念

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

  • 有一個特殊的結(jié)點,稱為根結(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)初階】二叉樹(1),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),二叉樹
    注意:樹形結(jié)構(gòu)中,子樹之間不能有交集,否則就不是樹形結(jié)構(gòu)
    【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),二叉樹

1.2 樹的相關(guān)概念

【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1),數(shù)據(jù)結(jié)構(gòu),數(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
節(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)棵互不相交的樹的集合稱為森林;

1.3 樹的表示

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

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

【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),二叉樹
【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),二叉樹

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

【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),二叉樹

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

2.1概念

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

  1. 或者為空
  2. 由一個根節(jié)點加上兩棵別稱為左子樹和右子樹的二叉樹組成
    【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),二叉樹
    從上圖可以看出:
  3. 二叉樹不存在度大于2的結(jié)點
  4. 二叉樹的子樹有左右之分,次序不能顛倒,因此二叉樹是有序樹
    注意:對于任意的二叉樹都是由以下幾種情況復(fù)合而成的:
    【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),二叉樹

2.2現(xiàn)實中的二叉樹

【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),二叉樹
【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),二叉樹

2.3 特殊的二叉樹

  1. 滿二叉樹:一個二叉樹,如果每一個層的結(jié)點數(shù)都達到最大值,則這個二叉樹就是滿二叉樹。也就是說,如果一個二叉樹的層數(shù)為K,且結(jié)點總數(shù)是2^k-1 ,則它就是滿二叉樹。
  2. 完全二叉樹:完全二叉樹是效率很高的數(shù)據(jù)結(jié)構(gòu),完全二叉樹是由滿二叉樹而引出來的。對于深度為K的,有n個結(jié)點的二叉樹,當(dāng)且僅當(dāng)其每一個結(jié)點都與深度為K的滿二叉樹中編號從1至n的結(jié)點一一對應(yīng)時稱之為完全二叉樹。 要注意的是滿二叉樹是一種特殊的完全二叉樹。
    【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),二叉樹
    【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),二叉樹
    高度是h節(jié)點范圍是多少?
    [2^(h-1) , 2^h-1]

2.4 二叉樹的性質(zhì)

【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),二叉樹

  1. 若i>0,i位置節(jié)點的雙親序號:(i-1)/2;i=0,i為根節(jié)點編號,無雙親節(jié)點
  2. 若2i+1<n,左孩子序號:2i+1,2i+1>=n否則無左孩子
  3. 若2i+2<n,右孩子序號:2i+2,2i+2>=n否則無右孩子

題目練習(xí)

1.某二叉樹共有 399 個結(jié)點,其中有 199 個度為 2 的結(jié)點,則該二叉樹中的葉子結(jié)點數(shù)為( )
A 不存在這樣的二叉樹
B 200
C 198
D 199
2.下列數(shù)據(jù)結(jié)構(gòu)中,不適合采用順序存儲結(jié)構(gòu)的是( )
A 非完全二叉樹
B 堆
C 隊列
D 棧
3.在具有 2n 個結(jié)點的完全二叉樹中,葉子結(jié)點個數(shù)為( )
A n
B n+1
C n-1
D n/2
4.一棵完全二叉樹的節(jié)點數(shù)位為531個,那么這棵樹的高度為( )
A 11
B 10
C 8
D 12
5.一個具有767個節(jié)點的完全二叉樹,其葉子節(jié)點個數(shù)為()
A 383
B 384
C 385
D 386
答案:
1.B 2.A 3.A 4.B 5.B

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

二叉樹一般可以使用兩種結(jié)構(gòu)存儲,一種順序結(jié)構(gòu),一種鏈?zhǔn)浇Y(jié)構(gòu)。

  1. 順序存儲
    順序結(jié)構(gòu)存儲就是使用數(shù)組來存儲,一般使用數(shù)組只適合表示完全二叉樹,因為不是完全二叉樹會有空間的浪費。而現(xiàn)實中使用中只有堆才會使用數(shù)組來存儲。二叉樹順序存儲在物理上是一個數(shù)組,在邏輯上是一顆二叉樹。
    【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),二叉樹

  2. 鏈?zhǔn)酱鎯?br> 二叉樹的鏈?zhǔn)酱鎯Y(jié)構(gòu)是指,用鏈表來表示一棵二叉樹,即用鏈來指示元素的邏輯關(guān)系。 通常的方法是鏈表中每個結(jié)點由三個域組成,數(shù)據(jù)域和左右指針域,左右指針分別用來給出該結(jié)點左孩子和右孩子所在的鏈結(jié)點的存儲地址 。鏈?zhǔn)浇Y(jié)構(gòu)又分為二叉鏈和三叉鏈,當(dāng)前我們學(xué)習(xí)中一般都是二叉鏈,后面學(xué)到高階數(shù)據(jù)結(jié)構(gòu)如紅黑樹等會用到三叉鏈。
    【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),二叉樹
    【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),二叉樹

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

??不知不覺,【數(shù)據(jù)結(jié)構(gòu)初階】樹,二叉樹學(xué)習(xí)告一段落。通讀全文的你肯定收獲滿滿,讓我們繼續(xù)為數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)共同奮進!!!文章來源地址http://www.zghlxwxcb.cn/news/detail-765836.html

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

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

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

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu):鏈?zhǔn)蕉鏄涑蹼A

    數(shù)據(jù)結(jié)構(gòu):鏈?zhǔn)蕉鏄涑蹼A

    目錄 一.鏈?zhǔn)蕉鏄涞倪壿嫿Y(jié)構(gòu) 1.鏈?zhǔn)蕉鏄涞慕Y(jié)點結(jié)構(gòu)體定義 2.鏈?zhǔn)蕉鏄溥壿嫿Y(jié)構(gòu) 二.鏈?zhǔn)蕉鏄涞谋闅v算法 1.前序遍歷 2.中序遍歷 3.后序遍歷? 4.層序遍歷(二叉樹非遞歸遍歷算法) 層序遍歷概念: 層序遍歷算法實現(xiàn)思路:? 層序遍歷代碼實現(xiàn): 三.鏈?zhǔn)蕉鏄浔闅v算法的運用

    2024年02月02日
    瀏覽(15)
  • 數(shù)據(jù)結(jié)構(gòu)初階--二叉樹的順序結(jié)構(gòu)之堆

    數(shù)據(jù)結(jié)構(gòu)初階--二叉樹的順序結(jié)構(gòu)之堆

    目錄 一.堆的概念及結(jié)構(gòu) 1.1.堆的概念 1.2.堆的存儲結(jié)構(gòu) 二.堆的功能實現(xiàn) 2.1.堆的定義 2.2.堆的初始化 2.3.堆的銷毀 2.4.堆的打印 2.5.堆的插入 向上調(diào)整算法 堆的插入 2.6.堆的刪除 向下調(diào)整算法 堆的刪除 2.7.堆的取堆頂元素 2.8.堆的判空 2.9.堆的求堆的大小 三.堆的創(chuàng)建 3.1.向上調(diào)

    2024年02月14日
    瀏覽(27)
  • 初階數(shù)據(jù)結(jié)構(gòu)之---二叉樹的順序結(jié)構(gòu)-堆

    初階數(shù)據(jù)結(jié)構(gòu)之---二叉樹的順序結(jié)構(gòu)-堆

    今天要講的堆,不是操作系統(tǒng)虛擬進程地址空間中(malloc,realloc等開空間的位置)的那個堆,而是數(shù)據(jù)結(jié)構(gòu)中的堆,它們雖然名字相同,卻是截然不同的兩個概念。堆的底層其實是 完全二叉樹 ,如果你問我,完全二叉樹是什么。好吧,那我先從樹開始講起,開始我們今天的

    2024年03月14日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu)奇妙旅程之二叉樹初階

    數(shù)據(jù)結(jié)構(gòu)奇妙旅程之二叉樹初階

    ??????? write in front???????? ?????????大家好,我是xiaoxie.希望你看完之后,有不足之處請多多諒解,讓我們一起共同進步????? . ?? ?xiaoxie?????????—CSDN博客 本文由xiaoxie??????????原創(chuàng) CSDN?如需轉(zhuǎn)載還請通知???? 個人主頁:xiaoxie??

    2024年01月19日
    瀏覽(30)
  • 【數(shù)據(jù)結(jié)構(gòu)初階】八、非線性表里的二叉樹(二叉樹的實現(xiàn) -- C語言鏈?zhǔn)浇Y(jié)構(gòu))

    【數(shù)據(jù)結(jié)構(gòu)初階】八、非線性表里的二叉樹(二叉樹的實現(xiàn) -- C語言鏈?zhǔn)浇Y(jié)構(gòu))

    ========================================================================= 相關(guān)代碼gitee自取 : C語言學(xué)習(xí)日記: 加油努力 (gitee.com) ?========================================================================= 接上期 : 【數(shù)據(jù)結(jié)構(gòu)初階】七、非線性表里的二叉樹(堆的實現(xiàn) -- C語言順序結(jié)構(gòu))-CSDN博客 ?==========

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

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

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

    2024年02月08日
    瀏覽(29)
  • 【初階數(shù)據(jù)結(jié)構(gòu)】二叉樹的幾種遍歷詳解

    【初階數(shù)據(jù)結(jié)構(gòu)】二叉樹的幾種遍歷詳解

    君兮_的個人主頁 勤時當(dāng)勉勵 歲月不待人 C/C++ 游戲開發(fā) Hello,米娜桑們,這里是君兮_,有了我們之前介紹的樹結(jié)構(gòu)與二叉樹的基礎(chǔ)概念,今天我們來講講對二叉樹的基本使用——遍歷 我們自己先簡單鏈?zhǔn)竭B接幾個結(jié)點來創(chuàng)建一個二叉樹方便我們之后對遍歷的講解 好了,有了

    2024年02月08日
    瀏覽(27)
  • 數(shù)據(jù)結(jié)構(gòu)初階之二叉樹的詳細解析

    數(shù)據(jù)結(jié)構(gòu)初階之二叉樹的詳細解析

    個人主頁:點我進入主頁 專欄分類:C語言初階? ? ??C語言程序設(shè)計————KTV? ? ? ?C語言小游戲? ? ?C語言進階 C語言刷題? ? ? ?數(shù)據(jù)結(jié)構(gòu)初階? ??Linux 歡迎大家點贊,評論,收藏。 一起努力,共赴大廠。 目錄 1.前言? 2.二叉樹各個功能代碼實現(xiàn) 2.1二叉樹結(jié)構(gòu)體 2.2二叉

    2024年02月05日
    瀏覽(26)
  • C語言數(shù)據(jù)結(jié)構(gòu)初階(10)----二叉樹的實現(xiàn)

    C語言數(shù)據(jù)結(jié)構(gòu)初階(10)----二叉樹的實現(xiàn)

    · CSDN的uu們,大家好。這里是C語言數(shù)據(jù)結(jié)構(gòu)的第十講。 · 目標(biāo):前路坎坷,披荊斬棘,扶搖直上。 · 博客主頁:?@姬如祎 · 收錄專欄:?數(shù)據(jù)結(jié)構(gòu)與算法 ? ? 目錄 1.?函數(shù)接口一覽 2.?函數(shù)接口的實現(xiàn) 2.1 BTNode* BuyNode(BTDataType x)?的實現(xiàn) 2.2?BTNode* CreateTree()?的實現(xiàn) ?2.3?void

    2023年04月08日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)初階之基礎(chǔ)二叉樹(C語言實現(xiàn))

    數(shù)據(jù)結(jié)構(gòu)初階之基礎(chǔ)二叉樹(C語言實現(xiàn))

    ?? 博客主頁: 小鎮(zhèn)敲碼人 ?? 熱門專欄:數(shù)據(jù)結(jié)構(gòu)與算法 ?? 歡迎關(guān)注:??點贊 ????留言 ??收藏 ?? 任爾江湖滿血骨,我自踏雪尋梅香。 萬千浮云遮碧月,獨傲天下百堅強。 男兒應(yīng)有龍騰志,蓋世一意轉(zhuǎn)洪荒。 莫使此生無痕度,終歸人間一捧黃。?????? ?? 什么

    2024年03月19日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包