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

C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)二叉樹(shù)先序、中序、后序及層次四種遍歷

 更新時(shí)間:2022年02月11日 09:29:49   作者:正弦定理  
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)二叉樹(shù)先序、中序、后序及層次四種遍歷方式,具有一定的知識(shí)性參考價(jià)值,需要的小伙伴可以先看一下

一、圖示展示

(1)先序遍歷

先序遍歷可以想象為,一個(gè)小人從一棵二叉樹(shù)根節(jié)點(diǎn)為起點(diǎn),沿著二叉樹(shù)外沿,逆時(shí)針走一圈回到根節(jié)點(diǎn),路上遇到的元素順序,就是先序遍歷的結(jié)果

先序遍歷結(jié)果為:A B D H I E J C F K G

動(dòng)畫(huà)演示:

記住小人沿著外圍跑一圈(直到跑回根節(jié)點(diǎn)),多看幾次動(dòng)圖便能理解

(2)中序遍歷

中序遍歷可以看成,二叉樹(shù)每個(gè)節(jié)點(diǎn),垂直方向投影下來(lái)(可以理解為每個(gè)節(jié)點(diǎn)從最左邊開(kāi)始垂直掉到地上),然后從左往右數(shù),得出的結(jié)果便是中序遍歷的結(jié)果

中遍歷結(jié)果為:H D I B E J A F K C G

動(dòng)畫(huà)展示:

記住,中序遍歷就是從最左邊開(kāi)始,把每個(gè)節(jié)點(diǎn)垂直投影到同一直線(xiàn)上,然后從左往右讀值就可以了,多看幾遍動(dòng)圖就理解了

(3)后序遍歷

后序遍歷就像是剪葡萄,我們要把一串葡萄剪成一顆一顆的。

還記得我上面提到先序遍歷繞圈的路線(xiàn)么?(不記得翻上面理解)

就是圍著樹(shù)的外圍繞一圈,如果發(fā)現(xiàn)一剪刀就能剪下的葡萄(必須是一顆葡萄)(也就是葡萄要一個(gè)一個(gè)掉下來(lái),不能一口氣掉超過(guò)1個(gè)這樣),就把它剪下來(lái),組成的就是后序遍歷了。

后序遍歷中,根節(jié)點(diǎn)默認(rèn)最后面

后序遍歷結(jié)果:H I D J E B K F G C A

動(dòng)畫(huà)展示:

(4)層次遍歷

層次遍歷很好理解,就是從根節(jié)點(diǎn)開(kāi)始,一層一層,從上到下,每層從左到右,依次寫(xiě)值就可以了

層次遍歷結(jié)果:A B C D E F G H I J K

解釋外圈跑的意思:

繞著外圍跑一整圈的真正含義是:遍歷所有結(jié)點(diǎn)時(shí),都先往左孩子走,再往右孩子走。

(5)口訣

先序遍歷: 先根 再左 再右

中序遍歷: 先左 再根 再右

后序遍歷: 先左 再右 再根

這里的根,指的是每個(gè)分叉子樹(shù)(左右子樹(shù)的根節(jié)點(diǎn))根節(jié)點(diǎn),并不只是最開(kāi)始頭頂?shù)母?jié)點(diǎn),需要靈活思考理解,建議畫(huà)圖理解?。?/p>

二、代碼展示

#include<stdio.h>
#include<stdlib.h>

typedef struct Tree{
?
?int data;?? ??? ??? ??? ??? ?//?? ?存放數(shù)據(jù)域
?struct Tree *lchild;?? ??? ??? ?//?? ?遍歷左子樹(shù)指針
?struct Tree *rchild;?? ??? ??? ?//?? ?遍歷右子樹(shù)指針
?
}Tree,*BitTree;

BitTree CreateLink()
{
?? ?int data;
?? ?int temp;
?? ?BitTree T;
?? ?
?? ?scanf("%d",&data);?? ??? ?//?? ?輸入數(shù)據(jù)
?? ?temp=getchar();?? ??? ??? ?//?? ?吸收空格
?? ?
?? ?if(data == -1){?? ??? ??? ?//?? ?輸入-1 代表此節(jié)點(diǎn)下子樹(shù)不存數(shù)據(jù),也就是不繼續(xù)遞歸創(chuàng)建
?? ??? ?
?? ??? ?return NULL;

?? ?}else{
?? ??? ?T = (BitTree)malloc(sizeof(Tree));?? ??? ??? ?//?? ??? ?分配內(nèi)存空間
?? ??? ?T->data = data;?? ??? ??? ??? ??? ??? ??? ??? ?//?? ??? ?把當(dāng)前輸入的數(shù)據(jù)存入當(dāng)前節(jié)點(diǎn)指針的數(shù)據(jù)域中
?? ??? ?
?? ??? ?printf("請(qǐng)輸入%d的左子樹(shù): ",data);?? ??? ?
?? ??? ?T->lchild = CreateLink();?? ??? ??? ??? ??? ?//?? ??? ?開(kāi)始遞歸創(chuàng)建左子樹(shù)
?? ??? ?printf("請(qǐng)輸入%d的右子樹(shù): ",data);?? ??? ??? ?
?? ??? ?T->rchild = CreateLink();?? ??? ??? ??? ??? ?//?? ??? ?開(kāi)始到上一級(jí)節(jié)點(diǎn)的右邊遞歸創(chuàng)建左右子樹(shù)
?? ??? ?return T;?? ??? ??? ??? ??? ??? ??? ?//?? ??? ?返回根節(jié)點(diǎn)
?? ?}?? ?
?? ?
}
//?? ?先序遍歷
void ShowXianXu(BitTree T)?? ??? ??? ?//?? ??? ?先序遍歷二叉樹(shù)
{
?? ?if(T==NULL)?? ??? ??? ??? ??? ??? ?//?? ?遞歸中遇到NULL,返回上一層節(jié)點(diǎn)
?? ?{
?? ??? ?return;
?? ?}
?? ?printf("%d ",T->data);
?? ?ShowXianXu(T->lchild);?? ??? ??? ?//?? ?遞歸遍歷左子樹(shù)
?? ?ShowXianXu(T->rchild);?? ??? ??? ?//?? ?遞歸遍歷右子樹(shù)
}
//?? ?中序遍歷
void ShowZhongXu(BitTree T)?? ??? ??? ?//?? ??? ?先序遍歷二叉樹(shù)
{
?? ?if(T==NULL)?? ??? ??? ??? ??? ??? ?//?? ?遞歸中遇到NULL,返回上一層節(jié)點(diǎn)
?? ?{
?? ??? ?return;
?? ?}
?? ?
?? ?ShowZhongXu(T->lchild);?? ??? ??? ?//?? ?遞歸遍歷左子樹(shù)
?? ?printf("%d ",T->data);
?? ?ShowZhongXu(T->rchild);?? ??? ??? ?//?? ?遞歸遍歷右子樹(shù)
?? ?
}
//?? ?后序遍歷
void ShowHouXu(BitTree T)?? ??? ??? ?//?? ??? ?后序遍歷二叉樹(shù)
{
?? ?if(T==NULL)?? ??? ??? ??? ??? ??? ?//?? ?遞歸中遇到NULL,返回上一層節(jié)點(diǎn)
?? ?{
?? ??? ?return;
?? ?}
?? ?
?? ?ShowHouXu(T->lchild);?? ??? ??? ?//?? ?遞歸遍歷左子樹(shù)
?? ?ShowHouXu(T->rchild);?? ??? ??? ?//?? ?遞歸遍歷右子樹(shù)
?? ?printf("%d ",T->data);
}


int main()
{
?? ?BitTree S;
?? ?printf("請(qǐng)輸入第一個(gè)節(jié)點(diǎn)的數(shù)據(jù):\n");
?? ?S = CreateLink();?? ??? ??? ?//?? ??? ?接受創(chuàng)建二叉樹(shù)完成的根節(jié)點(diǎn)
?? ?printf("先序遍歷結(jié)果: \n");
?? ?ShowXianXu(S);?? ??? ??? ??? ?//?? ??? ?先序遍歷二叉樹(shù)

?? ?printf("\n中序遍歷結(jié)果: \n");
?? ?ShowZhongXu(S);?? ??? ??? ??? ?//?? ??? ?中序遍歷二叉樹(shù)
?? ?
?? ?printf("\n后序遍歷結(jié)果: \n");
?? ?ShowHouXu(S);?? ??? ??? ??? ?//?? ??? ?后序遍歷二叉樹(shù)
?? ?
?? ?return 0;?? ?
} ?? ?

到此這篇關(guān)于C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)二叉樹(shù)先序、中序、后序及層次四種遍歷的文章就介紹到這了,更多相關(guān)C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)遍歷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++錯(cuò)誤使用迭代器超出引用范圍問(wèn)題及解決方案

    C++錯(cuò)誤使用迭代器超出引用范圍問(wèn)題及解決方案

    這篇文章主要介紹了C++錯(cuò)誤使用迭代器超出引用范圍分析與解決,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • 詳解C++中OpenSSL動(dòng)態(tài)鏈接庫(kù)的使用

    詳解C++中OpenSSL動(dòng)態(tài)鏈接庫(kù)的使用

    這篇文章主要介紹了OpenSSL動(dòng)態(tài)鏈接庫(kù)的使用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • C++中volatile關(guān)鍵字的使用詳解以及常見(jiàn)的誤解

    C++中volatile關(guān)鍵字的使用詳解以及常見(jiàn)的誤解

    volatile 關(guān)鍵字是一種類(lèi)型修飾符,用它聲明的類(lèi)型變量表示可以被某些編譯器未知的因素更改,比如:操作系統(tǒng),硬件或者其他線(xiàn)程等
    2020-01-01
  • C++超詳細(xì)講解智能指針

    C++超詳細(xì)講解智能指針

    為了解決內(nèi)存泄漏的問(wèn)題,C++中提出了智能指針。內(nèi)存泄漏的產(chǎn)生原因有很多,即使我們正確的使用malloc和free關(guān)鍵字也有可能產(chǎn)生內(nèi)存泄漏,如在malloc和free之間如果存在拋異常,那也會(huì)產(chǎn)生內(nèi)存泄漏。這種問(wèn)題被稱(chēng)為異常安全
    2022-06-06
  • C++萬(wàn)能庫(kù)頭文件在vs中的安裝步驟(圖文)

    C++萬(wàn)能庫(kù)頭文件在vs中的安裝步驟(圖文)

    這篇文章主要介紹了C++萬(wàn)能庫(kù)頭文件在vs中的安裝步驟(圖文),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • C語(yǔ)言責(zé)任鏈模式示例代碼

    C語(yǔ)言責(zé)任鏈模式示例代碼

    大家好,本篇文章主要講的是C語(yǔ)言責(zé)任鏈模式示例代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下,方便下次瀏覽
    2022-01-01
  • c++虛函數(shù)與虛函數(shù)表原理

    c++虛函數(shù)與虛函數(shù)表原理

    這篇文章主要介紹了c++虛函數(shù)與虛函數(shù)表原理,用virtual?修飾的成員函數(shù)叫虛函數(shù),下面圍繞c++虛函數(shù)與虛函數(shù)得相關(guān)資料展開(kāi)內(nèi)容,需要的朋友可以參考一下
    2021-12-12
  • C語(yǔ)言中結(jié)構(gòu)體、聯(lián)合體的成員內(nèi)存對(duì)齊情況

    C語(yǔ)言中結(jié)構(gòu)體、聯(lián)合體的成員內(nèi)存對(duì)齊情況

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中結(jié)構(gòu)體、聯(lián)合體的成員內(nèi)存對(duì)齊情況的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • VS2010 boost標(biāo)準(zhǔn)庫(kù)開(kāi)發(fā)環(huán)境安裝教程

    VS2010 boost標(biāo)準(zhǔn)庫(kù)開(kāi)發(fā)環(huán)境安裝教程

    這篇文章主要為大家詳細(xì)介紹了VS2010 boost標(biāo)準(zhǔn)庫(kù)開(kāi)發(fā)環(huán)境的安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 淺析C++11新特性的Lambda表達(dá)式

    淺析C++11新特性的Lambda表達(dá)式

    C++11 新增了很多特性,lambda 表達(dá)式是其中之一,本文涉及到C++11這次更新中較為重要的lambda表達(dá)式。有需要的朋友們可以參考學(xué)習(xí)。
    2016-08-08

最新評(píng)論

大城县| 龙山县| 荣成市| 桂林市| 肥乡县| 玉田县| 额济纳旗| 抚州市| 禄劝| 南溪县| 壤塘县| 汕头市| 开化县| 驻马店市| 饶阳县| 鲜城| 广西| 策勒县| 达尔| 韩城市| 鹿邑县| 河北区| 河西区| 澳门| 冷水江市| 临澧县| 玛纳斯县| 海城市| 东辽县| 两当县| 平和县| 铜梁县| 宣汉县| 文化| 谢通门县| 彭阳县| 云阳县| 永春县| 宜兰县| 武清区| 寿宁县|