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 ...
随机推荐
- Python的进程和线程——一些基础概念
1. 线程和进程 1.1 线程和进程 进程可以包含多个并行运行的线程: 通常,操作系统创建和管理线程比进程更省CPU资源: 线程用于一些小任务,进程用于繁重的任务: 同一个进程下的线程共享地址空间和其 ...
- Android 11(R) MultiMedia(十五)MediaCodec同步模式实现一个简易播放器
这一节是实践,学习android原生SimplePlayer并自己码一遍,果然学到很多. MyPlayer.h #include <media/stagefright/foundation/AH ...
- aspnet core运行后台服务任务
之前在公司的一个项目中需要用到定时程序,当时使用的是aspnet core提供的IHostedService接口来实现后台定时程序,具体的示例可去官网查看.现在的dotnet core中默认封装了实现 ...
- C++笔记(13)数组的引用和引用的数组
数组的引用 数组有二个特性,影响作用在数组上的函数:一是不能复制数组,二是使用数组名时, 数组名会自动指向其第一个元素的指针. 因为不能复制,所以无法编写使用数组类型的形参,数组会自动转化为指针.比如 ...
- Github 如何查看自己的 star 和 fork
最近在 github 上看到偶尔有几个项目被 fork,心里也是挺开心的,但是查看项目的 fork 和 star,网上没有一个具体的教程,都是一个模板各种抄,本文就详细介绍如何查看. 查看 fork ...
- vue绑定下拉框 vue修饰符
<select v-model="selected"> <option>请选择</option> <option>HTML</ ...
- 关于使用Gitlab CI-CD
关于使用 Gitlab CI/CD 如果是个人建议自己写脚本,手动运行,而不是使用 Gitlab CI/CD. 免费的 Runner 需要 Credit Card!
- Java第一次blog
7-1 答题判题程序-1 前言 这些题目主要用到对象与类的处理: 对象是现实世界或抽象概念中的实体在计算机程序中的表示. 类则是具有相同属性和方法的对象的集合,是创建对象的模板.通过类,我们可以定义一 ...
- 流程控制之for循环结构
1.for循环使用场景 1. 需要反复.重复执行的任务 2. 如创建100个用户,打印一百遍 chaoge666.插入数据库一万条数据等. 2.for语法 for 变量名 in 取值列表 do 每次循 ...
- Spring源码——ConfigurationClassPostProcessor类
引言 Spring容器中提供很多方便的注解供我们在工作中使用,比如@Configuration注解,里面可以在方法上定义@Bean注解,将调用方法返回的对象交由Bean容器进行管理,那么Spring框 ...