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

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

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

什么是層次遍歷?

對于一顆二叉樹來說,從根節(jié)點(diǎn)開始,按從上到下、從左到右的順序訪問每一個結(jié)點(diǎn)。

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

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

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

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

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

主體代碼:

 
BiTree InitTree()//二叉樹的創(chuàng)建
{
	BiTree T =(BiTree) malloc(sizeof(Tree));
	char data;
	scanf("%c", &data);
	getchar();
	if (data == '#')//如果data為#則該子樹為空值
		return NULL;
	else {
		T->data = data;
		printf("請輸入%c的左子樹:\n", data);
		T->lchild = InitTree();
		printf("請輸入%c的右子樹:\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)//判斷左右子樹是否為空,不為空則入隊(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)對二叉樹的層次遍歷。

總結(jié)

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

相關(guān)文章

最新評論

探索| 娱乐| 江永县| 巴彦县| 襄樊市| 肇庆市| 盖州市| 新平| 教育| 盐山县| 唐河县| 梅河口市| 阿城市| 明水县| 凤山市| 武汉市| 辽中县| 上饶县| 贵港市| 大荔县| 澜沧| 磐石市| 星子县| 分宜县| 廊坊市| 内江市| 闽清县| 武汉市| 汤原县| 郸城县| 昌乐县| 博客| 教育| 鄢陵县| 南华县| 永川市| 揭西县| 铜鼓县| 东安县| 河间市| 蚌埠市|