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

C++实现二叉树层序遍历层序遍历图示实现二叉树的层次遍历,要利用到队列。基本思想:1.先将根节点放到队列中2.根节点弹出队列,然后将根节点的左、右儿子入队3.弹出左儿子,放入左儿子的左右儿子4.弹出右儿子,放入右儿子的左右儿子5.重复3、4步图示过程:所用的二叉树如下队列的操作:将根节点弹出,放入左右儿子:将B节点弹出,放入左右儿子(只有右儿子):把D节点弹出,放入左右儿子:C、E、F都没有儿子节点,所以直接弹出队列即可: C++代码实现1.利用前序遍历思想输入二叉树。(前序

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

层序遍历图示

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

图示过程:
所用的二叉树如下
C++实现二叉树层序遍历

队列的操作:
C++实现二叉树层序遍历

将根节点弹出,放入左右儿子:
C++实现二叉树层序遍历

将B节点弹出,放入左右儿子(只有右儿子):
C++实现二叉树层序遍历

把D节点弹出,放入左右儿子:
C++实现二叉树层序遍历

C、E、F都没有儿子节点,所以直接弹出队列即可:
C++实现二叉树层序遍历

 

C++代码实现

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

#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;
}

在这里插入图片描述

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 15道常考SpringBoot面试题整理

    15道常考SpringBoot面试题整理1、什么是SpringBoot?多年来,随着新功能的增加,spring变得越来越复杂。只需访问https://spring.io/projects页面,我们就会看到可以在我们的应用程序中使用的所有Spring项目的不同功能。如果必须启动一个新的Spring项目,我们必须添加构建路径或添加Maven依赖关系,配置应用程序服务器,添加spring配置。因此,开始一个新的spring项目需…

  • 卡方线性趋势检验_spss 卡方的线性趋势检验如何做?[通俗易懂]

    卡方线性趋势检验_spss 卡方的线性趋势检验如何做?[通俗易懂]Analyze—DescriptiveStatistics-Crosstabs过程,分别放入两个变量,然后在Statistics过程中勾上Chi-squrae,完成后会出现卡方独立性检验结果,其中有Linear-by-LinearAssociation一项,应该就是你所谓的卡放线性趋势检验。不过你的数据格式:阶段恶性正常111426281473182175是这样的话是没法直接在…

  • 2019js前端面试最全集合

    2019js前端面试最全集合一、html和css部分1、如何理解CSS的盒子模型?标准盒子模型:宽度=内容的宽度(content)+border+padding低版本IE盒子模型:宽度=内容宽度(content+border+padding)2、BFC?什么是BFCBFC(BlockFormattingContext)格式化上下文,是Web页面中盒模型布局的CSS…

  • Spring官网下载各版本jar包

    Spring官网下载各版本jar包source: http://blog.csdn.net/yuexianchang/article/details/535833271:浏览器输入官网地址:http://spring.io/projects2:点击如图树叶页面按钮。 3:点击如图小猫图片按钮。 4:查找downloading spring artifacts链接点击。 5:

  • sublime text 3 用快捷键打开任意你想打开的默认浏览器(设置超级简单)[通俗易懂]

    sublime text 3 用快捷键打开任意你想打开的默认浏览器(设置超级简单)[通俗易懂]这个问题困扰了我三个小时,查了网上各种方法都不能实现,最终自己解决了。方法很简单。首先安装插件SideBarEnhancements。1.如何设置自己的默认浏览器?转载请注明出处:原文链接打开Preferences->PackageSettings->SideBar->settings-default,查看下面这句话”default_bro……

  • webapi安全验证_手机测试路由器丢包率

    webapi安全验证_手机测试路由器丢包率无线局域网鉴别与保密基础结构WAPI是无线局域网安全协议,也被列为多种检测的测试项目。自联盟成员西电捷通研发WAPI技术以来,我们在密切跟踪WAPI安全技术的基础上,按照协议的技术特点将其工程实践化,而且,基于对WAPI安全协议的深刻理解,我们对WAPI安全协议的检测形成了一套系统方法,并研发了WAPI安全协议检测系统,如何保障WAPI安全协议检测系统测试的准确性和稳定性将是测试工作的核心。

    2022年10月15日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号