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

C++超詳細(xì)實(shí)現(xiàn)二叉樹(shù)的遍歷

 更新時(shí)間:2022年05月25日 11:09:26   作者:錫蘭Ceylan_  
本章將會(huì)詳細(xì)講解二叉樹(shù)遍歷的四種方式,分別為前序遍歷、中序遍歷、后續(xù)遍歷和層序遍歷。在學(xué)習(xí)遍歷之前,會(huì)先帶大家回顧一下二叉樹(shù)的基本概念

二叉樹(shù)的遍歷

Q:什么是二叉樹(shù)的遍歷?

A:二叉樹(shù)的遍歷是指從根結(jié)點(diǎn)出發(fā),按照某種次序依次訪問(wèn)二叉樹(shù)中所有結(jié)點(diǎn),使得每個(gè)結(jié)點(diǎn)被訪問(wèn)一次,且僅被訪問(wèn)一次。

Q:二叉樹(shù)有幾種遍歷方法?

A:二叉樹(shù)的遍歷方法可以有很多種,如果限制了從左到右的習(xí)慣方式,那么主要分為以下四種:先序遍歷,中序遍歷,后序遍歷,層序遍歷。

前序遍歷

Q:什么是先序遍歷

A:先序遍歷就是先訪問(wèn)樹(shù)的根節(jié)點(diǎn),再訪問(wèn)樹(shù)的左子節(jié)點(diǎn),再訪問(wèn)右子節(jié)點(diǎn)。可以想象為,從一棵二叉樹(shù)根節(jié)點(diǎn)為起點(diǎn),沿著二叉樹(shù)外沿,逆時(shí)針走一圈回到根節(jié)點(diǎn),路上遇到的元素順序,就是先序遍歷的結(jié)果。

如圖:遍歷的順序?yàn)?ABDGHCEIF

操作定義

若二叉樹(shù)為空,則空操作返回,否則:

  • 訪問(wèn)根節(jié)點(diǎn)
  • 先序遍歷左子樹(shù)
  • 先序遍歷右子樹(shù)

代碼演示

void PreOrderTraversal(BiTree BT)
{
    if( BT != NULL ) 
    {
        printf(“%d\n”, BT->Data);        //對(duì)節(jié)點(diǎn)的數(shù)據(jù)進(jìn)行打印          
        PreOrderTraversal(BT->Left);     //訪問(wèn)左子樹(shù)
        PreOrderTraversal(BT->Right);    //訪問(wèn)右子樹(shù)
    }
}

中序遍歷

Q:什么是中序遍歷

A:中序遍歷就是訪問(wèn)完所有左子數(shù)后再訪問(wèn)根節(jié)點(diǎn),最后訪問(wèn)右子樹(shù),即左子樹(shù)-根節(jié)點(diǎn)-右子樹(shù)。中序遍歷可以看成,二叉樹(shù)每個(gè)節(jié)點(diǎn),垂直方向投影下來(lái),然后從左往右數(shù),得出的結(jié)果便是中序遍歷的結(jié)果。

如圖:遍歷的順序?yàn)镚DHBAECF

操作定義

若二叉樹(shù)為空,則空操作返回,否則:

  • 中序遍歷左子樹(shù)
  • 訪問(wèn)根節(jié)點(diǎn)
  • 中序遍歷右子樹(shù)

代碼演示

void InOrderTraversal(BiTree BT)
{
    if(BT)
    {
        InOrderTraversal(BT->Left);
        printf("%d\n", BT->Data);
        InOrderTraversal(BT->Right);
    }
}

后序遍歷

Q:什么后序遍歷

A:后序遍歷就是先訪問(wèn)左子樹(shù)和右子樹(shù),最后訪問(wèn)節(jié)點(diǎn),即左子樹(shù)-右子樹(shù)-根節(jié)點(diǎn)。后序遍歷可以看成圍著樹(shù)的外圍繞一圈,若下面只有一個(gè)結(jié)點(diǎn)就摘下來(lái),得出的結(jié)果便是后序遍歷的結(jié)果。

如圖:遍歷的順序?yàn)镚HDBIEFCA

操作定義

若二叉樹(shù)為空,則空操作返回,否則:

  • 后序遍歷左子樹(shù)
  • 后序遍歷右子樹(shù)
  • 訪問(wèn)根節(jié)點(diǎn)

代碼演示

void PostOrderTraversal(BiTree BT)
{
    if (BT)
    {
        PostOrderTraversal(BT->Left);
        PostOrderTraversal(BT->Right);
        printf("%d\n", BT->Data);
    }
}

層序遍歷

Q:什么層序遍歷

A:層次遍歷就是從根節(jié)點(diǎn)開(kāi)始,一層一層,從上到下,每層從左到右,依次取值。

如圖:遍歷的順序?yàn)锳BCDEFGHL

代碼演示

void LevelOrder(BiTree T){
	InitQueue(Q);				//初始化輔助隊(duì)列
	BiTree p;
	EnQueue(Q,T);				//將根結(jié)點(diǎn)入隊(duì)
	while(!IsEmpty(Q))
	{							//隊(duì)列不空則循環(huán)
		DeQueue(Q,p);			//隊(duì)頭結(jié)點(diǎn)出隊(duì)
		visit(p);				//訪問(wèn)出隊(duì)結(jié)點(diǎn)
		if(p->1child!=NULL)
			EnQueue(Q,p->lchild);//左子樹(shù)不空,則左子樹(shù)根結(jié)點(diǎn)入隊(duì)
		if(p->rchild!=NULL)
			EnQueue(Q,p->rchild);//右子樹(shù)不空,則右子樹(shù)根結(jié)點(diǎn)入隊(duì)
	}
}

到此這篇關(guān)于C++超詳細(xì)實(shí)現(xiàn)二叉樹(shù)的遍歷的文章就介紹到這了,更多相關(guān)C++二叉樹(shù)遍歷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用C++模擬實(shí)現(xiàn)STL容器:list

    利用C++模擬實(shí)現(xiàn)STL容器:list

    列表是一種順序容器,它允許在序列中的任何位置執(zhí)行常量時(shí)間插入和刪除操作,并允許在兩個(gè)方向上進(jìn)行迭代。本文將利用C++模擬實(shí)現(xiàn)list,希望對(duì)大家有所幫助
    2022-12-12
  • C++控制臺(tái)版掃雷游戲

    C++控制臺(tái)版掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C++控制臺(tái)版掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 簡(jiǎn)單總結(jié)C語(yǔ)言中各種類(lèi)型的指針的概念

    簡(jiǎn)單總結(jié)C語(yǔ)言中各種類(lèi)型的指針的概念

    這篇文章主要簡(jiǎn)單總結(jié)了C語(yǔ)言中各種類(lèi)型的指針的概念,指針可以說(shuō)是C語(yǔ)言本身所具有的最大特性,平時(shí)根據(jù)不同使用場(chǎng)合習(xí)慣地將其簡(jiǎn)單分類(lèi),需要的朋友可以參考下
    2016-03-03
  • C++實(shí)現(xiàn)LeetCode(97.交織相錯(cuò)的字符串)

    C++實(shí)現(xiàn)LeetCode(97.交織相錯(cuò)的字符串)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(97.交織相錯(cuò)的字符串),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語(yǔ)言實(shí)現(xiàn)掃雷小程序

    C語(yǔ)言實(shí)現(xiàn)掃雷小程序

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)掃雷小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C語(yǔ)言簡(jiǎn)析指針用途

    C語(yǔ)言簡(jiǎn)析指針用途

    C語(yǔ)言這門(mén)課程在計(jì)算機(jī)的基礎(chǔ)教學(xué)中一直占有比較重要的地位,然而要想突破C語(yǔ)言的學(xué)習(xí),對(duì)指針的掌握是非常重要的,本文將具體針對(duì)指針的基礎(chǔ)做詳盡的介紹
    2022-07-07
  • 深入理解C++11:探索lambda函數(shù)的奧秘

    深入理解C++11:探索lambda函數(shù)的奧秘

    聚焦于C++11,讓我們一起探索lambda函數(shù)的奧秘,本指南將帶您深入了解這個(gè)強(qiáng)大的編程工具,讓您在編程世界中如虎添翼,無(wú)論您是初學(xué)者還是有經(jīng)驗(yàn)的開(kāi)發(fā)者,本指南都將為您帶來(lái)全新的視角和實(shí)用的技巧,需要的朋友可以參考下
    2024-01-01
  • C語(yǔ)言 實(shí)現(xiàn)遍歷一個(gè)文件夾的所有文件

    C語(yǔ)言 實(shí)現(xiàn)遍歷一個(gè)文件夾的所有文件

    這篇文章主要介紹了C語(yǔ)言 實(shí)現(xiàn)遍歷一個(gè)文件夾的所有文件的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • openCV中meanshift算法查找目標(biāo)的實(shí)現(xiàn)

    openCV中meanshift算法查找目標(biāo)的實(shí)現(xiàn)

    本文主要介紹了openCV中meanshift算法查找目標(biāo)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C++之編寫(xiě)高效Makefile文件最佳方法

    C++之編寫(xiě)高效Makefile文件最佳方法

    在軟件開(kāi)發(fā)過(guò)程中,Makefile是一個(gè)非常重要的工具,它可以幫助我們自動(dòng)化構(gòu)建、編譯、測(cè)試和部署,然而,編寫(xiě)高效的Makefile文件并不是一件容易的事情。在本文中,我們將討論如何編寫(xiě)高效的Makefile文件,以提高開(kāi)發(fā)效率和產(chǎn)品質(zhì)量,需要的朋友可以參考下
    2023-05-05

最新評(píng)論

保亭| 灵丘县| 富顺县| 遂溪县| 县级市| 政和县| 宁蒗| 磐石市| 岑溪市| 海原县| 峨山| 海晏县| 承德市| 和林格尔县| 子长县| 体育| 榆社县| 大厂| 循化| 龙门县| 平远县| 富锦市| 定日县| 明溪县| 水富县| 和平县| 北京市| 永修县| 石阡县| 宣恩县| 天津市| 奉新县| 石景山区| 安化县| 红河县| 呼玛县| 萨嘎县| 都兰县| 铁岭市| 梧州市| 松溪县|