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

C語言?超詳細(xì)總結(jié)講解二叉樹的概念與使用

 更新時間:2022年04月08日 18:53:56   作者:拼命阿紫  
二叉樹可以簡單理解為對于一個節(jié)點來說,最多擁有一個上級節(jié)點,同時最多具備左右兩個下級節(jié)點的數(shù)據(jù)結(jié)構(gòu)。本文將詳細(xì)介紹一下C++中二叉樹的概念和結(jié)構(gòu),需要的可以參考一下

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

①概念:一棵二叉樹是結(jié)點的一個有限集合,該集合或者為空,或者是由一個根節(jié)點加上兩棵別稱為左子樹和右子樹的二叉樹組成。

②二叉樹的特點:

  • 每個結(jié)點最多有兩棵子樹,即二叉樹不存在度大于2的結(jié)點。(度最多為2)
  • 二叉樹的子樹有左右之分,其子樹的次序不能顛倒。

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

當(dāng)一名普通的人看到這樣一顆樹,可能會想:好標(biāo)準(zhǔn)的一棵樹

當(dāng)一個程序猿看到這樣一棵樹,可能會想:好像數(shù)據(jù)結(jié)構(gòu)中的二叉樹,并且還是顆滿二叉樹

④數(shù)據(jù)結(jié)構(gòu)中的二叉樹:

注:二叉樹最多有兩個度 

⑤特殊的二叉樹: 

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

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

⑦二叉樹的性質(zhì):

  • 若規(guī)定根節(jié)點的層數(shù)為1,則一棵非空二叉樹的第i層上最多有2^(i-1) 個結(jié)點.
  • 若規(guī)定根節(jié)點的層數(shù)為1,則深度為h的二叉樹的最大結(jié)點數(shù)是2^h- 1.
  • 對任何一棵二叉樹, 如果度為0其葉結(jié)點個數(shù)為 n0, 度為2的分支結(jié)點個數(shù)為 n2,則有n0=n2 +1
  • 若規(guī)定根節(jié)點的層數(shù)為1,具有n個結(jié)點的滿二叉樹的深度,h=log?n+1

⑧練習(xí)題  

2.二叉樹鏈?zhǔn)浇Y(jié)構(gòu)的實現(xiàn)

①二叉樹鏈?zhǔn)浇Y(jié)構(gòu)的遍歷 :

所謂遍歷(Traversal)是指沿著某條搜索路線,依次對樹中每個結(jié)點均做一次且僅做一次訪問。訪 問結(jié)點所做的操作依賴于具體的應(yīng)用問 題。 遍歷是二叉樹上最重要的運(yùn)算之一,是二叉樹上進(jìn)行 其它運(yùn)算之基礎(chǔ)。

前序/中序/后序的遞歸結(jié)構(gòu)遍歷:是根據(jù)訪問結(jié)點操作發(fā)生位置命名

  • 前序(先根):先訪問根節(jié)點,然后訪問左子樹,最后訪問右子樹
  • 中序(中根):先訪問左節(jié)點,然后訪問根節(jié)點,最后訪問右子樹 
  • 后序(后根):先訪問左節(jié)點,然后訪問右子樹,最后訪問根節(jié)點

 先定一個結(jié)構(gòu)體類型:

typedef char BTDataType;
typedef struct BinarytreeNode
{
	BTDataType data;
	struct BinarytreeNode* left;
	struct BinarytreeNode* right;
}BTNode;

 前序:

void Preamble(BTNode* p)//前序
{
	if (p == NULL)
	{
		printf("NULL ");
		return;
	}
	printf("%c ", p->data);
	Preamble(p->left);
	Preamble(p->right);
}

 中序:

void Morder(BTNode* p)//中序
{
	if (p == NULL)
	{
		printf("NULL ");
		return;
	}
	Morder(p->left);
	printf("%c ", p->data);
	Morder(p->right);
}

后序:

void Porder(BTNode* p)//后序
{
	if (p == NULL)
	{
		printf("NULL ");
		return;
	}
	Porder(p->left);
	Porder(p->right);
	printf("%c ", p->data);
}

 求二叉樹結(jié)點的個數(shù):

int treeSize(BTNode* p)//結(jié)點個數(shù)
{
	return p == NULL ? 0 : treeSize(p->left) + treeSize(p->right)+1;
}

求葉子結(jié)點的個數(shù):

int treeLeafSize(BTNode* p)//葉子結(jié)點個數(shù)
{
	if (p == NULL)
	{
		return 0;
	}
	if (p->left == NULL&&p->right == NULL)
	{
		return 1;
	}
 
	return treeLeafSize(p->left) + treeLeafSize(p->right);
}

到此這篇關(guān)于C語言 超詳細(xì)總結(jié)講解二叉樹的概念與使用的文章就介紹到這了,更多相關(guān)C語言 二叉樹內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++第三方庫jsoncpp超詳細(xì)講解

    C++第三方庫jsoncpp超詳細(xì)講解

    這篇文章主要介紹了C++第三方庫jsoncpp的相關(guān)資料,JSONcpp是一個在C++中用于處理JSON數(shù)據(jù)的庫,支持JSON格式的序列化和反序列化,通過JSONcpp,可以輕松地將數(shù)據(jù)對象組織成JSON格式的字符串,需要的朋友可以參考下
    2024-10-10
  • C語言編程中統(tǒng)計輸入的行數(shù)以及單詞個數(shù)的方法

    C語言編程中統(tǒng)計輸入的行數(shù)以及單詞個數(shù)的方法

    這篇文章主要介紹了C語言編程中統(tǒng)計輸入的行數(shù)以及單詞個數(shù)的方法,利用最基礎(chǔ)的循環(huán)和判斷語句寫成,需要的朋友可以參考下
    2015-11-11
  • C++深入講解函數(shù)重載

    C++深入講解函數(shù)重載

    C++ 允許多個函數(shù)擁有相同的名字,只要它們的參數(shù)列表不同就可以,這就是函數(shù)的重載(Function Overloading),借助重載,一個函數(shù)名可以有多種用途
    2022-07-07
  • c++隱式類型轉(zhuǎn)換示例分享

    c++隱式類型轉(zhuǎn)換示例分享

    這篇文章主要介紹了c++隱式類型轉(zhuǎn)換的二個示例,需要的朋友可以參考下
    2014-03-03
  • 利用C語言編寫“剪刀石頭布”小游戲

    利用C語言編寫“剪刀石頭布”小游戲

    這篇文章主要給大家介紹了關(guān)于如何利用C語言編寫“剪刀石頭布”小游戲的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Vs2022環(huán)境下安裝低版本.net framework的實現(xiàn)步驟

    Vs2022環(huán)境下安裝低版本.net framework的實現(xiàn)步驟

    本文主要介紹了Vs2022環(huán)境下安裝低版本.net framework的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 解析C++ 浮點數(shù)的格式化顯示

    解析C++ 浮點數(shù)的格式化顯示

    本篇文章是對C++中浮點數(shù)的格式化顯示進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 解讀構(gòu)造函數(shù)的調(diào)用規(guī)則、深拷貝與淺拷貝

    解讀構(gòu)造函數(shù)的調(diào)用規(guī)則、深拷貝與淺拷貝

    本文主要介紹了C++中的默認(rèn)構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)以及深拷貝和淺拷貝的概念,并通過實際代碼示例進(jìn)行了詳細(xì)講解
    2024-11-11
  • C++在非面向?qū)ο蠓矫鎸語言的擴(kuò)充

    C++在非面向?qū)ο蠓矫鎸語言的擴(kuò)充

    C++是一種面向?qū)ο缶幊陶Z言,但它也可以作為C語言的擴(kuò)展語言。在C++中,我們可以使用非面向?qū)ο蠓矫娴奶匦詠頂U(kuò)展C語言。在本文中,我們將討論C++在非面向?qū)ο蠓矫鎸語言的擴(kuò)充
    2023-05-05
  • C++如何實現(xiàn)定長內(nèi)存池詳解

    C++如何實現(xiàn)定長內(nèi)存池詳解

    內(nèi)存池根據(jù)存儲的元素的長度是否可變,分為變長,與定長兩種內(nèi)存池,這篇文章主要給大家介紹了關(guān)于C++如何實現(xiàn)定長內(nèi)存池的相關(guān)資料,需要的朋友可以參考下
    2021-09-09

最新評論

金昌市| 屯留县| 巫山县| 龙川县| 永定县| 高阳县| 新邵县| 石泉县| 玛沁县| 高邑县| 山阴县| 门头沟区| 大田县| 乌拉特后旗| 阜新市| 洮南市| 伊金霍洛旗| 肇源县| 珠海市| 晋宁县| 息烽县| 永丰县| 安泽县| 墨脱县| 广饶县| 辽阳市| 台南县| 龙井市| 中卫市| 广西| 东丰县| 滕州市| 平利县| 泗洪县| 丹东市| 中方县| 武清区| 无棣县| 漠河县| 平乐县| 苏尼特右旗|