二叉树的广度优先遍历(层序遍历)

先定义一个二叉树的结点

在这里插入图片描述
再创建二叉树,这里就不写了,之前的有创建二叉树的博客。

层序遍历

用到栈的思想,

	1	 先让根 节点进队列,2 	然后读队顶元素,3 	让他出队列4	打印它的值5	让队顶元素的左右子树进栈,当它的左右子树都不为空时执行6 	并一直执行此操作,直到遍历完

当队列中无元素时,便把整个树遍历完了。

在这里插入图片描述

c++版本

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*///用来表示队列中存放的数据类型struct levelNode{int level;TreeNode *root;};
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>>ret;if(root==NULL){return ret;}queue<levelNode> q;levelNode ln={0,root};q.push(ln);while(!q.empty()){levelNode front =q.front();q.pop();if(ret.size() <= front.level){vector<int>v;ret.push_back(v);}ret[front.level].push_back(front.root->val);if(front.root->left!=NULL){levelNode lnc = {front.level+1,front.root->left};q.push(lnc);}if(front.root->right!=NULL){levelNode lnc = {front.level+1,front.root->right};q.push(lnc);}}return ret;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用前序中序创建二叉树(用中序后序创建二叉树)

定义二叉树结点 比如就拿这个二叉树 前序中序创建 因为前序遍历的顺序是 根 &#xff0c; 左 &#xff0c;右。 中序的遍历是 左 根 右。 我们会很不好想&#xff0c;但我们可以用前序和中序把上面那个二叉树的遍历一边 前序遍历&#xff1a;ABDEHCFG中序遍历&#xff1a;D…

Epoll详解及源码分析

文章来源&#xff1a;http://blog.csdn.net/chen19870707/article/details/42525887 Author&#xff1a;Echo Chen&#xff08;陈斌&#xff09; Email&#xff1a;chenb19870707gmail.com Blog&#xff1a;Blog.csdn.net/chen19870707 Date&#xff1a;Jan.7th, 2015 1…

非递归实现二叉树(前序,中序,后序)c/c++实现

这里还是用到栈的思想&#xff0c;为了方便用了c的一些内容&#xff0c;把出栈&#xff0c;进栈&#xff0c;读栈顶元素用一个个函数封装起来了&#xff0c;前面做了一些处理来使用这些函数。 前序非递归 思想&#xff1a;一直走左边&#xff0c;依次进栈。等左边为空的时候&…

Linux 中统计一个进程的线程数

如果你想看到 Linux 中每个进程的线程数&#xff0c;有以下几种方法可以做到这一点。 方法一: /proc proc 伪文件系统&#xff0c;它驻留在 /proc 目录&#xff0c;这是最简单的方法来查看任何活动进程的线程数。 /proc 目录以可读文本文件形式输出&#xff0c;提供现有进程和系…

Linux_linux基础命令(增删查,权限,Linux下的重要目录,重要命令(. du, df, top, free, pstack, su, sudo).安装gcc/g++, gdb, vim )

r&#xff1a;表示可读w&#xff1a;表示可写x&#xff1a;表示可执行也可以用数字表示这一点我们会在修改文件权限说明。对于文件夹的rwx表示&#xff1a;r表示可读及可以查看文件夹内容可以ls查看w表示可写及可以向文件夹中传送内容如文件x表示可执行及可以向文件夹中可以cd进…

Linux_linux常用工具之make/makefile详解

make/makefile make/makefile: 项目自动化构建工具 makefile:普通文本文件&#xff0c;记录了项目的构建流程规则。 make: 一个解释程序&#xff0c;到当前执行make命令的目录下寻找makefile文件&#xff0c;并且对makefile 中记录的项目构建规则进行解释执行。makefile: 编写…

Linux_linux常用工具(git,vim ,gcc ,gdb,权限)超详解

git :项目版本控制工具 项目克隆&#xff1a;git clone项目提交&#xff1a;git add&#xff08;本地仓库提交&#xff09; git commit -m “bak msg”&#xff08;-m 备注信息&#xff09;同步到服务器&#xff1a;git push origin master&#xff08;提交到主分支&…

Linux_linux常用工具------进度条程序

缓冲区对文件读写的影响&#xff1a;数据并没有直接写入文件&#xff0c;而是写入到缓冲区&#xff08;内存&#xff09;中&#xff0c;等到缓冲区中数据写满或者刷新缓冲区的时候&#xff0c;才会将数据真正的写入文件 fflush&#xff08;stdout&#xff09;刷新。 回车与换行…

Ubuntu下QT的安装详细教程

本文转自&#xff1a;http://blog.chinaunix.net/uid-7945126-id-4987195.html 经测试完美解决 ------------------------------------------------------------- 最近需要在Ubuntu下开发桌面软件&#xff0c;想起了QT。书上介绍的方法太老了&#xff0c;网上找了一大堆安装方法…

Linux_linux常用工具---闲杂篇(除了vim, 还有哪些常用的牛逼的编辑器, 并能够横向对比编辑器之间的区别和优缺点.)

vim自行查找资料, 自行配置插件. 借鉴别人的 " 显示相关 “”""""""""""""""""""""""""""""""""&…

ubuntu14.04下安装qt4.8.6 +qt creator

原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://248341.blog.51cto.com/238341/1438867以前安装时没太注意&#xff0c;安装qt后发现在qt creator下无法输入中文&#xff0c;或者中文无法…

堆(概念,数据结构中堆与内存堆区的区别 ,堆的基本操作)

堆的特性&#xff1a; 必须是完全二叉树 用数组实现 任一结点的值是其子树所有结点的最大值或最小值 最大值时&#xff0c;称为“最大堆”&#xff0c;也称大根堆&#xff1b; 在完全二叉树中&#xff0c;任何一个子树的最大值都在这个子树的根结点。最小值时&#xff0c;称为…

网络基础2(分层模型,通信过程,以太网,ARP协议格式和具体功能详解)

分层模型 OSI七层模型 OSI模型 1 物理层&#xff1a;主要定义物理设备标准&#xff0c;如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流&#xff08;就是由1、0转化为电流强弱来进行传输&#xff0c;到达目的地后再转化为1、0&#…

网络基础3(IP段格式,UDP数据报格式,TCP数据报格式)

IP段格式 IP数据报的首部长度和数据长度都是可变长的&#xff0c;但总是4字节的整数倍。 对于IPv4&#xff0c;4位版本字段是4。4位首部长度的数值是以4字节为单位的&#xff0c;最小值为5&#xff0c;也就是说首部长度最小是4x520字节&#xff0c;也就是不带任何选项的IP首部…

堆的应用(堆排序,TopK问题)

堆的应用 1&#xff09;排序 堆排序 选择排序 既可以找到最大的放在最后 也可以找到最小的方最前 但是&#xff0c;堆排序不能找最小的放在最前 因为把最小数放在最前&#xff0c;会破坏掉堆的原来的顺序&#xff0c;除非重新建堆 1&#xff0c; 2&#xff0c;9&#xff0c…

网络基础4(TCP三次握手,四次握手,TCP流量控制,TCP状态转换 , TCP异常断开,设置TCP属性,端口复用)

TCP协议 TCP通信时序 下图是一次TCP通讯的时序图。TCP连接建立断开。包含大家熟知的三次握手和四次握手。 TCP通讯时序 在这个例子中&#xff0c;首先客户端主动发起连接、发送请求&#xff0c;然后服务器端响应请求&#xff0c;然后客户端主动关闭连接。 两条竖线表示通讯的…

排序(基本概念及分类,直接插入排序和希尔排序)

排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&a…

直接交换排序

直接交换排序 缺点&#xff1a;进行一些重复性比较&#xff0c;解决放法&#xff1a;堆排序 选择排序优化 //如果当前的数大于假定最大的数 //改变下标 //如果当前的数小于假定最小的数 //改变下标 //遍历数组跳到下一个元素 //如果最大的数没有在它的位置上 //交换 //交换…

快速排序概念及实现

快速排序 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&#xff0c; 其基本思想为&#xff1a; 任取待排序元素序列中的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子序列中所有元素均小于基准值&#xff0c;右子序列…

归并排序概念及其实现

基本思想&#xff1a; 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个…