欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

二叉樹的遍歷

Q:什么是二叉樹的遍歷?

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

Q:二叉樹有幾種遍歷方法?

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

前序遍歷

Q:什么是先序遍歷

A:先序遍歷就是先訪問樹的根節(jié)點,再訪問樹的左子節(jié)點,再訪問右子節(jié)點??梢韵胂鬄?,從一棵二叉樹根節(jié)點為起點,沿著二叉樹外沿,逆時針走一圈回到根節(jié)點,路上遇到的元素順序,就是先序遍歷的結(jié)果。

如圖:遍歷的順序為 ABDGHCEIF

操作定義

若二叉樹為空,則空操作返回,否則:

  • 訪問根節(jié)點
  • 先序遍歷左子樹
  • 先序遍歷右子樹

代碼演示

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

中序遍歷

Q:什么是中序遍歷

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

如圖:遍歷的順序為GDHBAECF

操作定義

若二叉樹為空,則空操作返回,否則:

  • 中序遍歷左子樹
  • 訪問根節(jié)點
  • 中序遍歷右子樹

代碼演示

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

后序遍歷

Q:什么后序遍歷

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

如圖:遍歷的順序為GHDBIEFCA

操作定義

若二叉樹為空,則空操作返回,否則:

  • 后序遍歷左子樹
  • 后序遍歷右子樹
  • 訪問根節(jié)點

代碼演示

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

層序遍歷

Q:什么層序遍歷

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

如圖:遍歷的順序為ABCDEFGHL

代碼演示

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

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

相關(guān)文章

  • 常用的C++標(biāo)準(zhǔn)庫頭文件小結(jié)

    常用的C++標(biāo)準(zhǔn)庫頭文件小結(jié)

    C++標(biāo)準(zhǔn)庫定義了一系列函數(shù)、宏和對象,以實現(xiàn)跨團(tuán)隊、跨平臺的高效且具有卓越性能的標(biāo)準(zhǔn)化 C++ 代碼, 本文介紹常用的C++標(biāo)準(zhǔn)庫頭文件,需要的朋友可以參考下
    2023-11-11
  • C++類中如何使用定義的類型別名

    C++類中如何使用定義的類型別名

    這篇文章主要介紹了C++類中如何使用定義的類型別名,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語言輕松實現(xiàn)掃雷小游戲

    C語言輕松實現(xiàn)掃雷小游戲

    掃雷是一款經(jīng)典的小游戲,這篇文章主要為大家詳細(xì)介紹了C語言輕松實現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++編譯報錯:||error: ld returned 1 exit status|的解決

    C++編譯報錯:||error: ld returned 1 exit 

    這篇文章主要介紹了C++編譯報錯:||error: ld returned 1 exit status|的解決方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • C++實現(xiàn)的求解多元一次方程示例

    C++實現(xiàn)的求解多元一次方程示例

    這篇文章主要介紹了C++實現(xiàn)的求解多元一次方程,涉及C++矩陣運算相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • opencv利用視頻的前n幀求平均圖像

    opencv利用視頻的前n幀求平均圖像

    這篇文章主要為大家詳細(xì)介紹了opencv利用視頻的前n幀求平均圖像,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • VC++實現(xiàn)CStdioFile寫入及讀取文件并自動換行的方法

    VC++實現(xiàn)CStdioFile寫入及讀取文件并自動換行的方法

    這篇文章主要介紹了VC++實現(xiàn)CStdioFile寫入及讀取文件并自動換行的方法,很實用的功能,需要的朋友可以參考下
    2014-08-08
  • C語言可變參數(shù)列表的用法與深度剖析

    C語言可變參數(shù)列表的用法與深度剖析

    這篇文章主要給大家介紹了關(guān)于C語言可變參數(shù)列表的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-02-02
  • VS2022 Git提交代碼的實現(xiàn)

    VS2022 Git提交代碼的實現(xiàn)

    本文主要介紹了VS2022 Git提交代碼的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • VS2022 CUDA環(huán)境配置的實現(xiàn)步驟

    VS2022 CUDA環(huán)境配置的實現(xiàn)步驟

    本文主要介紹了VS2022 CUDA環(huán)境配置的實現(xiàn)步驟,文中通過圖文示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05

最新評論