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)
blank

相关推荐

  • poj 2689 巧妙地运用素数筛选

    poj 2689 巧妙地运用素数筛选

  • Android Studio入门教程(新手必看)[通俗易懂]

    Android Studio入门教程(新手必看)[通俗易懂]上篇文章已经说过了AndroidStudio的安装配置,从这里开始我们就来完成第一个Android项目吧!如何安装配置还不太熟悉的可以参考这篇文章:AndroidStudio安装配置详细步骤(超详细) 让我们开始第一个Android项目吧1.建立项目选一个EmptyActivity,然后Next默认即可,点击FinishName:文件名Savelocation:文件的保存位置Language:默认Java,会用Kotlin的也可以更改APIlevel:默认即可,级别低运行

  • Windows 自己主动关机命令 shuntdown

    Windows 自己主动关机命令 shuntdown

  • 【数据结构】链表的原理及java实现

    【数据结构】链表的原理及java实现一:单向链表基本介绍链表是一种数据结构,和数组同级。比如,Java中我们使用的ArrayList,其实现原理是数组。而LinkedList的实现原理就是链表了。链表在进行循环遍历时效率不高,但是插入和删除时优势明显。下面对单向链表做一个介绍。单向链表是一种线性表,实际上是由节点(Node)组成的,一个链表拥有不定数量的节点。其数据在内存中存储是不连续的,它存储的数据分散在内存中,每个结点只能也只有它

  • maven快速入门_maven如何使用

    maven快速入门_maven如何使用企业级架构框架图之前我们关注的是前端的解决方案(涉及到的技术有H5、CSS3、JavaScript,CSS升级为Bootstrap再升级到ElementUI,JavaScript升级到jQuery再升级到Vue+NodeJS)现在开始我们开始关注后端的解决方案,也就是服务器端到底干了什么,哪些技术来支持(SpringBoot、Maven、SpringMVC、Spring、Mybatis)。这样前后端都学习完,整个软件项目所需要的基本技术就全线贯通,就可以自己独立完成企业级项目的开发了。下面我们来描

  • mapstate映射数组名(逆映射)

    mapState映射可以将State中的数据yourName映射到本地this.yourName,使用之前要将相应的文件引入state:页面组件:原本使用state中数据的方法:使用mapState之后:除了使用这种数组的方式,mapState里面也可以放一个对象意思是将公用数据中的city映射到此组件中的计算属性currentCity中…

发表回复

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

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