前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++实现二叉树层序遍历

C++实现二叉树层序遍历

作者头像
全栈程序员站长
发布2022-08-31 18:17:35
6700
发布2022-08-31 18:17:35
举报

大家好,又见面了,我是你们的朋友全栈君。

444

层序遍历图示

实现二叉树的层次遍历,要利用到队列。 基本思想: 1.先将根节点放到队列中 2.根节点弹出队列,然后将根节点的左、右儿子入队 3.弹出左儿子,放入左儿子的左右儿子 4.弹出右儿子,放入右儿子的左右儿子 5.重复3、4步

图示过程: 所用的二叉树如下

C++实现二叉树层序遍历
C++实现二叉树层序遍历

队列的操作:

C++实现二叉树层序遍历
C++实现二叉树层序遍历

将根节点弹出,放入左右儿子:

C++实现二叉树层序遍历
C++实现二叉树层序遍历

将B节点弹出,放入左右儿子(只有右儿子):

C++实现二叉树层序遍历
C++实现二叉树层序遍历

把D节点弹出,放入左右儿子:

C++实现二叉树层序遍历
C++实现二叉树层序遍历

C、E、F都没有儿子节点,所以直接弹出队列即可:

C++实现二叉树层序遍历
C++实现二叉树层序遍历

C++代码实现

1.利用前序遍历思想输入二叉树。(前序创建二叉树:创建二叉树) 2.进行层序遍历

代码语言:javascript
复制
#include <iostream>
#include <queue>
#include <malloc.h>

using namespace std;

typedef char DataType;

typedef struct Node *BinTree;
typedef BinTree Link;
typedef struct Node BinTNode;

struct Node{ 
   
	DataType data;
	Link Left,Right;
};

//创建二叉树
void creat_BinTree(BinTree *T){ 
   
	char ch;
	
	scanf("%c",&ch);
	if(ch=='#'){ 
   
		*T=NULL;
	}else{ 
   
		*T=(BinTNode*)malloc(sizeof(BinTNode));
		(*T)->data=ch;
		(*T)->Left=NULL;
		(*T)->Right=NULL;
		
		creat_BinTree(&((*T)->Left));
		creat_BinTree(&((*T)->Right));
	}
	return ;
} 

//层序遍历
void LevelOrder(BinTree BT){ 
   
	queue<BinTNode*> q;
	BinTree T;
	if(!BT)return;
	q.push(BT);
	while(!q.empty()){ 
   
		T=q.front();
		q.pop();
		printf("%c ",T->data);
		if(T->Left)q.push(T->Left);
		if(T->Right)q.push(T->Right);
	}
} 

int main(int argc, char** argv) { 
   
	BinTree Tree;
	creat_BinTree(&Tree);
	
	LevelOrder(Tree);
	
	return 0;
}
在这里插入图片描述
在这里插入图片描述

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143656.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 层序遍历图示
  • C++代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档