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

    2021年5月18日
    138
  • java该怎么自学?[通俗易懂]

    java该怎么自学?[通俗易懂]java如何自学java该怎么自学?传智播客-黑马程序员-Java每个人的学习方法是不同的,一个人的方法不见得适合另一个人,我只能是谈自己的学习方法。因为我学习Java是完全自学的,从来没有问过别人,所以学习的过程基本上完全是自己摸索出来的。我也不知道这种方法是否是比较好的方法,只能给大家提供一点参考了。学习Java的第一步是安装好JDK写一个Hello?World,其实JDK的学习没有那么简单,关于JDK有两个问题是很容易一直困扰Java程序员的地方:一个是的问题,其实从原理上来说,是要搞清楚

    2022年7月7日
    24
  • LabelImg教程[通俗易懂]

    LabelImg教程[通俗易懂]目标检测中,原始图片的标注过程是非常重要的,它的作用是在原始图像中标注目标物体位置并对每张图片生成相应的xml文件表示目标标准框的位置。本文介绍一款使用方便且能够标注多类别并能直接生成xml文件的标注工具——labelImg工具,并对其使用方法做一个介绍。本文仅针对ubuntu系统做使用介绍。1、下载LabelImg方式1:网址:https://github.com/tzu…

    2022年6月20日
    53
  • MacBook Pro死机强制重启键

    MacBook Pro死机强制重启键MacBookPro死机强制重启

    2022年6月16日
    94
  • Springboot文件上传_maven上传jar包到远程仓库

    Springboot文件上传_maven上传jar包到远程仓库springboot文件上传机制:1.访问路径2. 上传完成后返回访问文件地址3. 我们只需要访问返回的地址就可以访问到图片4. yaml配置文件(localpath是实际存储的地址)5. 添加配置类,进行访问地址和存储地址映射 @Value(“${file.upload.suffixPath}”) private String uploadSuffixPath; @Value(“${file.upload.localPath}”) private Strin

    2022年8月8日
    2
  • 基于php教师档案管理系统毕业设计

    基于php教师档案管理系统毕业设计获取项目源文件,联系Q:1415736481,可指导毕设,课设随着经济的发展和社会的进步,高校的现代化管理逐渐被人们所重视,利用计算机对高校的管理在各个领域中都有广阔的发展空间和前景。高校教师档案管理系统的设计与实现对高等院校的决策者和管理者来说至关重要,对教育系统来说更是不可缺少的。本系统采用PHP语言和MySQL数据库等技术,基于B/S模式,根据管理员、教务处管理员、教师三种不同的用户权限…

    2025年6月27日
    0

发表回复

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

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