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

【數(shù)據(jù)結(jié)構(gòu)】二叉樹的創(chuàng)建和四種遍歷(附帶詳細注釋)

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

前言

  1. 《數(shù)據(jù)結(jié)構(gòu)系列首頁》是數(shù)據(jù)結(jié)構(gòu)系列文章的首頁,其中會逐步更新各種數(shù)據(jù)結(jié)構(gòu)的實現(xiàn),有興趣的選手可以一看。
  2. 首頁中不僅有各種數(shù)據(jù)結(jié)構(gòu)的實現(xiàn),還有學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)必備的基礎(chǔ)知識,如果有選手覺得自己的基礎(chǔ)不太牢固,可以先將搞定基礎(chǔ)知識,之后再攻克數(shù)據(jù)結(jié)構(gòu)這一部分的內(nèi)容。
  3. 由于我也是剛開始學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)這門課程,所以如果發(fā)現(xiàn)文章中存在錯誤,希望大家可以直接指出,我將第一時間修改
  4. 更多數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)請見《數(shù)據(jù)結(jié)構(gòu)系列文章》,我會在學(xué)習(xí)完新的數(shù)據(jù)結(jié)構(gòu)后不斷更新其中的內(nèi)容。

一、開場白

樹是一種比起線性表更加復(fù)雜的存儲結(jié)構(gòu),其是一種非常重要的非線性數(shù)據(jù)結(jié)構(gòu),樹結(jié)構(gòu)在客觀世界中普遍存在,其中二叉樹的運用最為廣泛。本篇文章主要介紹了二叉樹的鏈式存儲結(jié)構(gòu)(即二叉鏈表)的創(chuàng)建與遍歷,這將為以后對二叉樹的研究起到至關(guān)重要的作用。

二、二叉樹結(jié)點的設(shè)計

考慮到二叉樹中的每個結(jié)點最多可以指向兩個結(jié)點,所以為二叉樹的結(jié)點設(shè)置一個數(shù)據(jù)域和兩個指針域是非常自然的想法。

typedef char TreeElemType; // 定義二叉樹的元素類型為字符類型

// 定義二叉樹結(jié)點
typedef struct TreeNode
{
   
	TreeElemType data; // 數(shù)據(jù)域
	struct TreeNode* leftchild;  // 左指針域
	struct TreeNode* rightchild; // 右指針域
}TreeNode, * TREE; // TREE 等同于 struct TreeNode *

二叉樹結(jié)點結(jié)構(gòu)如下圖所示:
【數(shù)據(jù)結(jié)構(gòu)】二叉樹的創(chuàng)建和四種遍歷(附帶詳細注釋)

三、二叉樹的遍歷

先序遍歷

  • 先序遍歷規(guī)則

若二叉樹為空,則不進行遍歷;否則先訪問根結(jié)點,然后前序遍歷左子樹,再前序遍歷右子樹。如下圖所示,先序遍歷的結(jié)果為ABDGHCEIF。由遍歷結(jié)果可知,先序遍歷屬于深度優(yōu)先遍歷,即優(yōu)先向樹的最深處探索。
【數(shù)據(jù)結(jié)構(gòu)】二叉樹的創(chuàng)建和四種遍歷(附帶詳細注釋)

  • 先序遍歷遞歸算法
void pre_order_traverse(TREE T)
{
   
	if (T) // T為空是遞歸結(jié)束的條件
	{
   
		putchar(T->data); // 打印根結(jié)點的數(shù)據(jù)
		pre_order_traverse(T->leftchild);  // 先序遍歷左子樹
		pre_order_traverse(T->rightchild); // 先序遍歷右子樹
	}
}

中序遍歷

  • 中序遍歷規(guī)則

若二叉樹為空,則不進行遍歷;否則先中序遍歷左子樹,然后訪問根結(jié)點,再中序遍歷右子樹。如下圖所示,中序遍歷的順序為GDHBAEICF。
【數(shù)據(jù)結(jié)構(gòu)】二叉樹的創(chuàng)建和四種遍歷(附帶詳細注釋)
在寫二叉樹的中序遍歷結(jié)果時,有個更加快捷的方法:從樹根向下將二叉樹一腳踩扁,之后按照踩扁后的樹,從左至右依次寫出各結(jié)點的數(shù)據(jù)即可。以上圖中的樹為例,踩扁之后就變成了下圖:
【數(shù)據(jù)結(jié)構(gòu)】二叉樹的創(chuàng)建和四種遍歷(附帶詳細注釋)
根據(jù)結(jié)點從左到右出現(xiàn)的次序,想象所有的結(jié)點都在一條線上,這樣寫出各結(jié)點的數(shù)據(jù)后得到的便是該樹的中序遍歷結(jié)果,即GDHBAEICF。

  • 中序遍歷遞歸算法
void in_order_traverse(TREE T)
{
   
	if (T) // T為空是遞歸結(jié)束的條件
	{
   
		in_order_traverse(T->leftchild);  // 中序遍歷左子樹
		putchar(T->data); // 打印根結(jié)點的數(shù)據(jù)
		in_order_traverse(T->rightchild); // 中序遍歷右子樹
	}
}
  • 中序遍歷非遞歸算法

中序遍歷非遞歸算法用到了鏈棧的部分知識,,詳細內(nèi)容可以參見《鏈棧的實現(xiàn)》這篇文章。文章來源地址http://www.zghlxwxcb.cn/news/detail-445621.html

  1. 鏈棧結(jié)構(gòu)的設(shè)計
typedef TREE StackElemType; // 定義棧的元素類型為樹結(jié)點的指針

// 定義棧的結(jié)點
typedef struct StackNode
{
   
	StackElemType data; // 數(shù)據(jù)域
	struct StackNode* next; // 指針域
}StackNode, * STACK; // STACK 等同于 struct StackNode *

// 定義鏈棧結(jié)構(gòu)
typedef struct LinkedStack
{
   
	STACK top; // 棧頂指針
	int length; // 當(dāng)前棧中元素的個數(shù)
}LinkedStack;
  1. 鏈棧操作函數(shù)的聲明
void init_stack(LinkedStack&);
void push_stack(LinkedStack&, StackElemType);
bool stack_is_empty(LinkedStack&);
bool pop_stack(LinkedStack&, StackElemType&);
void destroy_stack(LinkedStack&);
  1. 鏈棧操作函數(shù)
// 初始化鏈棧S

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)】二叉樹的創(chuàng)建和四種遍歷(附帶詳細注釋)的文章就介紹完了。如果您還想了解更多內(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)——二叉樹的鏈式結(jié)構(gòu)

    數(shù)據(jù)結(jié)構(gòu)——二叉樹的鏈式結(jié)構(gòu)

    ? 個人主頁 : 日刷百題 系列專欄 : 〖C語言小游戲〗〖Linux〗〖數(shù)據(jù)結(jié)構(gòu)〗 ?〖C語言〗 ?? 歡迎各位 → 點贊 ??+ 收藏 ??+ 留言 ??? ? 這里我們使用先序遍歷的思想來創(chuàng)建二叉樹,這里的內(nèi)容對于剛接觸二叉樹的朋友可能有些難理解,不妨先看完下面的二叉樹各種遍歷

    2024年02月05日
    瀏覽(31)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的鏈式結(jié)構(gòu)

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的鏈式結(jié)構(gòu)

    學(xué)習(xí)鏈式二叉樹要知道三種遍歷方式,便于對二叉樹的節(jié)點以及左子樹和右子樹進行操作。 前序遍歷:根、左子樹、右子樹 中序遍歷:左子樹、根、右子樹 后序遍歷:左子樹、右子樹、根 以下圖為例: 得到的結(jié)果: 前序遍歷:1 2 3 4 5 6 中序遍歷:3 2 1 5 4 6 后序遍歷:3 2

    2024年02月08日
    瀏覽(29)
  • 數(shù)據(jù)結(jié)構(gòu):二叉樹的鏈式結(jié)構(gòu)

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

    朋友們、伙計們,我們又見面了,本期來給大家解讀一下鏈式二叉樹的相關(guān)知識點,如果看完之后對你有一定的啟發(fā),那么請留下你的三連,祝大家心想事成! 數(shù)據(jù)結(jié)構(gòu)與算法專欄 :數(shù)據(jù)結(jié)構(gòu)與算法 個? 人? 主? 頁 :stackY、 C 語 言 專 欄 :C語言:從入門到精通 目錄 前言

    2024年02月07日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的介紹和二叉樹堆

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的介紹和二叉樹堆

    ??作者簡介: 加油,旭杏,目前大二,正在學(xué)習(xí) C++ , 數(shù)據(jù)結(jié)構(gòu) 等?? ??作者主頁:加油,旭杏的主頁?? ?本文收錄在:再識C進階的專欄?? ??代碼倉庫:旭日東升 1?? ??歡迎大家點贊 ?? 收藏 ? 加關(guān)注哦!?? ???????樹這一概念,在我們剛開始聽說的時候會覺得

    2024年01月20日
    瀏覽(34)
  • 【數(shù)據(jù)結(jié)構(gòu)】樹,二叉樹,滿二叉樹,完全二叉樹的定義和二叉樹的基本操作

    【數(shù)據(jù)結(jié)構(gòu)】樹,二叉樹,滿二叉樹,完全二叉樹的定義和二叉樹的基本操作

    ??專欄【數(shù)據(jù)結(jié)構(gòu)】 ??喜歡的詩句:更喜岷山千里雪 三軍過后盡開顏。 ??音樂分享【勛章】 大一同學(xué)小吉,歡迎并且感謝大家指出我的問題?? 目錄 ?樹 ??????定義 ???????注意 ??樹的基本術(shù)語 ?二叉樹 ??????定義 ??二叉樹和樹的區(qū)別 ??????二叉樹

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

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

    朋友們、伙計們,我們又見面了,本期來給大家解讀一下二叉樹--堆的相關(guān)知識點,如果看完之后對你有一定的啟發(fā),那么請留下你的三連,祝大家心想事成! C 語 言 專 欄:C語言:從入門到精通 數(shù)據(jù)結(jié)構(gòu)專欄:數(shù)據(jù)結(jié)構(gòu) 個? 人? 主? 頁 :stackY、 目錄 前言: 1.堆的概念及

    2024年02月06日
    瀏覽(28)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的順序結(jié)構(gòu)-堆

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

    普通的二叉樹是不適合用數(shù)組來存儲的,因為可能會存在大量的空間浪費。而 完全二叉樹 更適合使用順序結(jié)構(gòu)存儲。 現(xiàn)實中我們通常把堆(一種二叉樹)使用順序結(jié)構(gòu)的數(shù)組來存儲,需要注意的是這里的堆和操作系統(tǒng)虛擬進程地址空間中的堆是兩回事,一個是數(shù)據(jù)結(jié)構(gòu),一個

    2024年02月09日
    瀏覽(29)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的概念及結(jié)構(gòu)

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的概念及結(jié)構(gòu)

    ??write in front?? ??所屬專欄: 初階數(shù)據(jù)結(jié)構(gòu) ???博客主頁:睿睿的博客主頁 ???代碼倉庫:??VS2022_C語言倉庫 ??您的點贊、關(guān)注、收藏、評論,是對我最大的激勵和支持!?。?關(guān)注我,關(guān)注我,關(guān)注我 , 你們將會看到更多的優(yōu)質(zhì)內(nèi)容!! 樹是一種 非線性的數(shù)據(jù)結(jié)構(gòu)

    2023年04月23日
    瀏覽(29)
  • 【數(shù)據(jù)結(jié)構(gòu)—二叉樹的鏈式結(jié)構(gòu)實現(xiàn)】

    【數(shù)據(jù)結(jié)構(gòu)—二叉樹的鏈式結(jié)構(gòu)實現(xiàn)】

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言 一、二叉樹的存儲結(jié)構(gòu) 二、二叉樹鏈式結(jié)構(gòu)的實現(xiàn) 2.1手動構(gòu)建一課樹 2.2二叉樹的遍歷 三、二叉樹鏈式結(jié)構(gòu)的實現(xiàn) 3.1前序遍歷(遞歸) 3.2中序遍歷(遞歸) 3.3后序遍歷(遞歸) 3.4層序遍歷(非遞

    2024年02月03日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu) —— 二叉樹的鏈式結(jié)構(gòu)實現(xiàn)】

    【數(shù)據(jù)結(jié)構(gòu) —— 二叉樹的鏈式結(jié)構(gòu)實現(xiàn)】

    樹是一種非線性的數(shù)據(jù)結(jié)構(gòu),它是由n(n=0)個有限結(jié)點組成一個具有層次關(guān)系的集合。 把它叫做樹是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。 1.有一個 特殊的結(jié)點,稱為根結(jié)點 ,根節(jié)點沒有前驅(qū)結(jié)點 2.除根節(jié)點外, 其余結(jié)點被分成M(M0)個互不相交

    2024年02月05日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包