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

C語(yǔ)言實(shí)現(xiàn)二叉樹(shù)層次遍歷介紹

 更新時(shí)間:2022年01月20日 14:43:52   作者:愛(ài)學(xué)代碼的學(xué)生  
大家好,本篇文章主要講的是C語(yǔ)言實(shí)現(xiàn)二叉樹(shù)層次遍歷介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下

什么是層次遍歷?

對(duì)于一顆二叉樹(shù)來(lái)說(shuō),從根節(jié)點(diǎn)開(kāi)始,按從上到下、從左到右的順序訪問(wèn)每一個(gè)結(jié)點(diǎn)。

注:每一個(gè)結(jié)點(diǎn)有且訪問(wèn)一次。

那我們?nèi)绾蝸?lái)實(shí)現(xiàn)這個(gè)算法呢?

實(shí)現(xiàn)原理:

對(duì)于二叉樹(shù)來(lái)說(shuō),它是一個(gè)遞歸的定義,我們要實(shí)現(xiàn)層次遍歷必然要滿(mǎn)足從上到下、從左到右這個(gè)要求,從根結(jié)點(diǎn)出發(fā),我們可以將所有意義上的根結(jié)點(diǎn)都存儲(chǔ)在隊(duì)列之中,那我們可以使用隊(duì)列先進(jìn)先出的特點(diǎn)來(lái)實(shí)現(xiàn)要求的遍歷。

這里我們需要引用隊(duì)列來(lái)實(shí)現(xiàn)。

主體代碼:

 
BiTree InitTree()//二叉樹(shù)的創(chuàng)建
{
	BiTree T =(BiTree) malloc(sizeof(Tree));
	char data;
	scanf("%c", &data);
	getchar();
	if (data == '#')//如果data為#則該子樹(shù)為空值
		return NULL;
	else {
		T->data = data;
		printf("請(qǐng)輸入%c的左子樹(shù):\n", data);
		T->lchild = InitTree();
		printf("請(qǐng)輸入%c的右子樹(shù):\n", data);
		T->rchild = InitTree();
	}
	return T;
}
void ShowCengci(BiTree T)
{
	LinkQueue qu;
	InitQueue(&qu);//初始化隊(duì)列
	enQueue(&qu, T);//根結(jié)點(diǎn)入隊(duì)
	while (QueueEmpty(qu))//判斷隊(duì)列中是否為空
	{
		BiTree S = deQueue(&qu);//根節(jié)點(diǎn)出隊(duì)
		printf("%c ", S->data);
		if (S->lchild != NULL)//判斷左右子樹(shù)是否為空,不為空則入隊(duì)
		{
			enQueue(&qu, S->lchild);
		}
		if (S->rchild != NULL)
		{
			enQueue(&qu, S->rchild);
		}
	}

隊(duì)列的鏈?zhǔn)綄?shí)現(xiàn):

typedef struct BTree
{
	char data;
	struct BTree* lchild;
	struct BTree* rchild;
}Tree,*BiTree;
typedef struct Queue
{
	BiTree data;
	struct Queue* next;
}Qnode,*Queueptr;
typedef struct point
{
	Queueptr front;//頭指針
	Queueptr rear;//尾指針
}LinkQueue;
 
void InitQueue(LinkQueue* qu)
{
	qu->front = qu->rear = (Queueptr)malloc(sizeof(Qnode));
	if (qu->front == NULL)
		return;
}
void enQueue(LinkQueue* qu, BiTree S)
{
	Queueptr p = (Queueptr)malloc(sizeof(Qnode));
	if (p == NULL) {
		return;
	}
	if (S == NULL)
		return;
	p->data = S;
	p->next = NULL;
	qu->rear->next = p;
	qu->rear = p;
}
int QueueEmpty(LinkQueue qu)
{
	if (qu.front != qu.rear)
		return 1;
	else
		return 0;
}
BiTree deQueue(LinkQueue* qu)
{
	if (qu->front == qu->rear)
		return;
	Queueptr p = qu->front->next;
	BiTree q = p->data;
	qu->front->next = p->next;
	if (qu->rear == p)
		qu->rear = qu->front;
	free(p);
	return q;
}

通關(guān)上述代碼可以實(shí)現(xiàn)對(duì)二叉樹(shù)的層次遍歷。

總結(jié)

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

相關(guān)文章

  • C++實(shí)現(xiàn) vector 的四則運(yùn)算

    C++實(shí)現(xiàn) vector 的四則運(yùn)算

    本文給大家介紹的是在C++中實(shí)現(xiàn)高效的vector四則運(yùn)算的方法的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • C/C++ProtoBuf使用小結(jié)

    C/C++ProtoBuf使用小結(jié)

    ProtoBuf全稱(chēng):protocol buffers,直譯過(guò)來(lái)是:“協(xié)議緩沖區(qū)”,是一種與語(yǔ)言無(wú)關(guān)、與平臺(tái)無(wú)關(guān)的可擴(kuò)展機(jī)制,用于序列化結(jié)構(gòu)化數(shù)據(jù),這篇文章主要介紹了C/C++ProtoBuf使用,需要的朋友可以參考下
    2024-01-01
  • C語(yǔ)言學(xué)習(xí)之函數(shù)知識(shí)總結(jié)

    C語(yǔ)言學(xué)習(xí)之函數(shù)知識(shí)總結(jié)

    函數(shù)是一組一起執(zhí)行一個(gè)任務(wù)的語(yǔ)句。每個(gè)?C?程序都至少有一個(gè)函數(shù),即主函數(shù)?main()?,所有簡(jiǎn)單的程序都可以定義其他額外的函數(shù)。本文就為大家詳細(xì)講講C語(yǔ)言中函數(shù)的相關(guān)知識(shí)點(diǎn),希望有所幫助
    2022-07-07
  • C語(yǔ)言 不使用strcat函數(shù)實(shí)現(xiàn)連接兩個(gè)字符串功能代碼

    C語(yǔ)言 不使用strcat函數(shù)實(shí)現(xiàn)連接兩個(gè)字符串功能代碼

    今天小編就為大家分享一篇C語(yǔ)言 不使用strcat函數(shù)實(shí)現(xiàn)連接兩個(gè)字符串功能代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • c/c++內(nèi)存分配大小實(shí)例講解

    c/c++內(nèi)存分配大小實(shí)例講解

    在本篇文章里小編給大家整理了一篇關(guān)于c/c++內(nèi)存分配大小實(shí)例講解內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)參考下。
    2021-11-11
  • Qt5 串口類(lèi)QSerialPort的實(shí)現(xiàn)

    Qt5 串口類(lèi)QSerialPort的實(shí)現(xiàn)

    在Qt5以上提供了QtSerialPort模塊,方便編程人員快速的開(kāi)發(fā)應(yīng)用串口的應(yīng)用程序。本文主要介紹了Qt5 串口類(lèi)QSerialPort的實(shí)現(xiàn),,感興趣的可以了解一下
    2022-05-05
  • 深入遍歷二叉樹(shù)的各種操作詳解(非遞歸遍歷)

    深入遍歷二叉樹(shù)的各種操作詳解(非遞歸遍歷)

    本篇文章是對(duì)遍歷二叉樹(shù)的各種操作進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • c++中nlohmann?json的基本使用教程

    c++中nlohmann?json的基本使用教程

    nlohmann/json 是一個(gè)C++實(shí)現(xiàn)的JSON解析器,使用非常方便直觀,下面這篇文章主要給大家介紹了關(guān)于c++中nlohmann?json基本使用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 模擬鼠標(biāo)事件的實(shí)現(xiàn)思路及代碼

    模擬鼠標(biāo)事件的實(shí)現(xiàn)思路及代碼

    這篇文章主要介紹了模擬鼠標(biāo)事件的實(shí)現(xiàn)思路及代碼,有需要的朋友可以參考一下
    2013-12-12
  • C++?vector與數(shù)組轉(zhuǎn)換寫(xiě)入/讀出文件方式

    C++?vector與數(shù)組轉(zhuǎn)換寫(xiě)入/讀出文件方式

    這篇文章主要介紹了C++?vector與數(shù)組轉(zhuǎn)換寫(xiě)入/讀出文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評(píng)論