LeetCode102.二叉树的层序遍历
LeetCode题目链接:https://leetcode.cn/problems/binary-tree-level-order-traversal/submissions/548489149/
题目叙述:
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。

这道题就是简单的叫我们求层序遍历的代码,二叉树的层序遍历实际上就是一个广度优先遍历(BFS),我们可以用一个队列来模拟这个过程。
步骤1
1.力扣上面的原题要求我们返回一个二维数组,即每个一维数组存储每一层遍历的结果,我们首先定义一个vector的二维数组result,如果传入的根节点为空,我们直接返回这个空的二维数组即可。
步骤2
2.如果根节点不为空的话,我们定义一个队列queue,并将根节点入队。
步骤3
3.接下来我们就是来模拟层序遍历的过程了,我们在队列里操作这颗二叉树的节点时,当队列为空,二叉树是不是就已经遍历完了?可以自己手动模拟试一试,可以很容易的发现,当队列为空时,我们的二叉树
就遍历完了,因此,我们的外层循环条件为队列不为空
步骤4
4.由于我们的题目要求我们要返回每一层遍历的结果,因此,我们需要一个元素来记录我们当前层次的元素个数,怎么记录呢?————就是当前队列的元素个数,因此,我们可以使用size变量来存储我们当前
层次的元素个数,并用一个数组current来记录当前层次遍历的结果,最后每一次将current放入result即可,接下来就进入循环的过程了,我们遍历每一层的时候操作size次,就可以将当前层次的元素全部
遍历,并且将下一层的元素全部入队。
怎么将队列中的元素放进数组呢?
我们在单层循环内,可以使用node变量,来取出我们队列的头部元素,同时将头部元素出队,并将node->val存入当前数组current中,判断node的左孩子是否为空,若不为空,就将node的左孩子入队,右孩子
也是如此。最后,经过若干次循环,当队列中的元素为空时,我们的遍历也就完成了
最后,这道题完整的代码如下:
class Solution {
public:
	vector<vector<int>> levelOrder(TreeNode* root) {
		//定义二维数组,作为返回结果
		vector<vector<int>> result;
		//根节点为空,就直接返回空数组
		if (root == NULL) return result;
		//定义模拟队列
		queue<TreeNode*> que;
		//根节点入队
		que.push(root);
		while (!que.empty()) {
			//记录每一层的操作次数
			int size = que.size();
			//使用current数组来存储每一层遍历的结果
			vector<int> current;
			//每一层循环size次就可以了
			while(size--) {
				//取队头元素
				TreeNode* node = que.front();
				//队头元素出队
				que.pop();
				//将每一层遍历的元素放入current数组中
				current.push_back(node->val);
				//看左孩子是否为空,不为空就将左孩子入队
				if (node->left != nullptr) que.push(node->left);
				if (node->right != nullptr) que.push(node->right);
			}
			//将current数组放入二维数组当中
			result.push_back(current);
		}
		//最后,返回这个二维数组就可以了!
		return result;
	}
};
												
											LeetCode102.二叉树的层序遍历的更多相关文章
- 二叉树的层序遍历 BFS
		
二叉树的层序遍历,或者说是宽度优先便利,是经常考察的内容. 问题一:层序遍历二叉树并输出,直接输出结果即可,输出格式为一行. #include <iostream> #include &l ...
 - Leetcode 102. Binary Tree Level Order Traversal(二叉树的层序遍历)
		
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
 - 剑指offer 二叉树的层序遍历
		
剑指offer 牛客网 二叉树的层序遍历 # -*- coding: utf-8 -*- """ Created on Tue Apr 9 09:33:16 2019 @ ...
 - leetcode之二叉树的层序遍历
		
1.题目描述 2.题目分析 二叉树的层序遍历主要算法思想是使用 队列这一数据结构实现,这个数据结构多应用在和 图相关的算法.例如图的广度优先遍历就可以使用队列的方法实现.本题的关键在于如何识别出一层已 ...
 - LeetCode 102. 二叉树的层序遍历 | Python
		
102. 二叉树的层序遍历 题目来源:https://leetcode-cn.com/problems/binary-tree-level-order-traversal 题目 给你一个二叉树,请你返 ...
 - 刷题-力扣-107. 二叉树的层序遍历 II
		
107. 二叉树的层序遍历 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-level-order-tr ...
 - 五三想休息,今天还学习,图解二叉树的层序遍历BFS(广度优先)模板,附面试题题解
		
壹 ❀ 引 我在从JS执行栈角度图解递归以及二叉树的前.中.后遍历的底层差异一文中,从一个最基本的数组遍历引出递归,在掌握递归的书写规则后,又从JS执行栈角度解释了二叉树三种深度优先(前序.中序后序) ...
 - leetcode题解:Tree Level Order Traversal II (二叉树的层序遍历 2)
		
题目: Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from ...
 - leetcode 题解:Binary Tree Level Order Traversal (二叉树的层序遍历)
		
题目: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ri ...
 - 剑指Offer21 二叉树的层序遍历
		
/************************************************************************* > File Name: 21_PrintT ...
 
随机推荐
- C#开发的应用升级更新服务器端工具 - 开源研究系列文章 - 个人小作品
			
笔者开发过一些小应用,然后这些应用就需要有升级更新的功能,但是如果每个都集成进去也行,但是就是得写死更新的代码了.于是就想写一个应用升级更新的管理器,以前看到过Github上有一个AutoUpdate ...
 - Flutter(七):Flutter混合开发--接入现有原生工程(iOS+Android)
			
在上一篇文章Flutter(六):Flutter_Boost接入现有原生工程(iOS+Android)中介绍了Flutter_Boost的接入方法,这一篇将介绍Flutter自带的接入方法. 新建工程 ...
 - SwiftUI(一)- VStack、HStack、ZStack布局
			
SwiftUI是什么 懒得写,直接找了一篇博客: 初识 SwiftUI 三种布局 SwiftUI包括三种布局: VStack: 纵向布局,默认居中对齐 HStack: 横向布局,默认居中对齐 ZSta ...
 - Dump Rtmp Audio Stream To AAC Formate File (从Rtmp流提取并保存AAC音频文件)
			
一.准备工作 参考:https://www.cnblogs.com/doudouyoutang/p/10220599.html 搭建本地rtmp服务: https://www.cnblogs.com/ ...
 - Linux Shell命令提示样式修改
			
对linux shell命令样式进行美化. 修改前的效果: 修改后的效果: 直接给出.bashrc脚本代码: 1 # ~/.bashrc: executed by bash(1) for non-lo ...
 - ETL工具-nifi干货系列 第六讲 处理器JoltTransformJSON
			
1.处理器作用 使用Jolt转换JSON数据为其他结构的JSON,成功的路由到'success',失败的'failure'.处理JSON的实用程序不是基于流的,因此大型JSON文档转换可能会消耗大量内 ...
 - C# yyyyMMddHHmmss 格式的日期转换
			
C# yyyyMMddHHmmss 格式的日期转换 DateTime dtTimeEnd = DateTime.Now; if (!string.IsNullOrWhiteSpace(rspA.fin ...
 - 华擎 asrock b365m itx win7蓝牙播放音乐爆音
			
华擎 asrock b365m itx win7蓝牙播放音乐爆音,吱吱吱的杂音. 偶然间,系统换成WIN10后,再用蓝牙耳机听歌,则正常.机箱位置不变.
 - Python做点击率数据预测
			
点击率(Click-Through Rate, CTR)预测是推荐系统.广告系统和搜索引擎中非常重要的一个环节.在这个场景中,我们通常需要根据用户的历史行为.物品的特征.上下文信息等因素来预测用户点击 ...
 - Lru-k在Rust中的实现及源码解析
			
LRU-K 是一种缓存淘汰算法,旨在改进传统的LRU(Least Recently Used,最近最少使用)算法的性能.将其中高频的数据达到K次访问移入到另一个队列进行保护. 算法思想 LRU-K中的 ...