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

在这里插入图片描述

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 木马编程-手把手带你进入木马的世界之木马编程

    木马编程-手把手带你进入木马的世界之木马编程一、基础知识1.1、木马病毒木马(Trojan)这个名字来源于古希腊传说(荷马史诗中木马计的故事,Trojan一词的本意是特洛伊的,即代指特洛伊木马,也就是木马计的故事)。木马会想尽一切办法隐藏自己,主要途径有:在任务栏中隐藏自己,这是最基本的办法。只要把Form的Visible属性设为False,ShowInTaskBar设为False,程序运行时

    2022年6月29日
    30
  • visdom API 方便使用查阅

    visdom API 方便使用查阅代码Structure如下:1、基础Visdom提供以下基本的可视化功能:vis.image:图片 vis.images:图像列表 vis.text:任意的HTML vis.video:视频 vis.svg:SVG对象 vis.save:序列化状态服务器端2、绘制我们已经封装了几种常见的绘图类型,以便轻松创建基本可视化。这些可视化由Plotly提供支持。目前支持…

    2022年6月17日
    37
  • 解决DEDECMS Call to undefined function dede_htmlspecialchars()

    解决DEDECMS Call to undefined function dede_htmlspecialchars()

    2021年9月20日
    39
  • java基础入门(一)[通俗易懂]

    前言:1.笔者的java没有经过真正系统的学习过,只是跟着书上自学的。所以有些地方难免会理解错误之类的,如果看到错误的地方,请指出来,或者有什么不理解的地方也可以提出来,大家一起进步。2.这篇教程是一个学习方向的引导,且只针对基础入门(更加进阶的知识笔者也还在学习)。3.java的基础入门知识网上有很多,很多大神的博客里也有总结,笔者不认为自己能比大神总结的好。所以在这篇教程里,…

    2022年4月6日
    35
  • 大数据专业学什么,应该学习什么语言

    大数据专业学什么,应该学习什么语言大数据(bigdata),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。目前,

    2022年8月6日
    3
  • java工程师青春饭吗_Java工程师是青春饭吗?

    java工程师青春饭吗_Java工程师是青春饭吗?首先来说说,为什么会有些开发人员会被裁掉呢?因为Java行业是竞争力比较大的行业,由于现在社会上的各种对Java行业的宣传,现在越来也多的年轻人学习Java技能并想找Java相关的工作,这就使得一些人如果找到工作后不好好工作浑水摸鱼就很容易被别的年轻人挤掉工作岗位。其次Java开发并不是一门熟能生巧的工作,Java开发技术日新月异,更新换代很快,所以并不是你掌握好几项Java技术并找到工作后就能安…

    2022年7月7日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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