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.二叉树的层序遍历的更多相关文章

  1. 二叉树的层序遍历 BFS

    二叉树的层序遍历,或者说是宽度优先便利,是经常考察的内容. 问题一:层序遍历二叉树并输出,直接输出结果即可,输出格式为一行. #include <iostream> #include &l ...

  2. 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, ...

  3. 剑指offer 二叉树的层序遍历

    剑指offer 牛客网 二叉树的层序遍历 # -*- coding: utf-8 -*- """ Created on Tue Apr 9 09:33:16 2019 @ ...

  4. leetcode之二叉树的层序遍历

    1.题目描述 2.题目分析 二叉树的层序遍历主要算法思想是使用 队列这一数据结构实现,这个数据结构多应用在和 图相关的算法.例如图的广度优先遍历就可以使用队列的方法实现.本题的关键在于如何识别出一层已 ...

  5. LeetCode 102. 二叉树的层序遍历 | Python

    102. 二叉树的层序遍历 题目来源:https://leetcode-cn.com/problems/binary-tree-level-order-traversal 题目 给你一个二叉树,请你返 ...

  6. 刷题-力扣-107. 二叉树的层序遍历 II

    107. 二叉树的层序遍历 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-level-order-tr ...

  7. 五三想休息,今天还学习,图解二叉树的层序遍历BFS(广度优先)模板,附面试题题解

    壹 ❀ 引 我在从JS执行栈角度图解递归以及二叉树的前.中.后遍历的底层差异一文中,从一个最基本的数组遍历引出递归,在掌握递归的书写规则后,又从JS执行栈角度解释了二叉树三种深度优先(前序.中序后序) ...

  8. leetcode题解:Tree Level Order Traversal II (二叉树的层序遍历 2)

    题目: Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from ...

  9. leetcode 题解:Binary Tree Level Order Traversal (二叉树的层序遍历)

    题目: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ri ...

  10. 剑指Offer21 二叉树的层序遍历

    /************************************************************************* > File Name: 21_PrintT ...

随机推荐

  1. SpringMVC在处理Ajax请求后返回void导致前台Ajax回调函数不执行

    问题简述 在一次SpringMVC项目中,前台通过Ajax请求,准备修改数据库中的数据.因为Ajax请求只是让后台更改数据,所以Controller方法根本不需要返回给前台任何数据,所以我们将Cont ...

  2. windows下IPv6通信(C++、MFC)

    Server #include <stdio.h> #include <Ws2tcpip.h> #include <winsock2.h> #define HELL ...

  3. Postman POST多个文件

    软件做的比较好用,

  4. gRPC入门学习之旅(十)

    gRPC入门学习之旅目录 gRPC入门学习之旅(一) gRPC入门学习之旅(二) gRPC入门学习之旅(三) gRPC入门学习之旅(四) gRPC入门学习之旅(七)  gRPC入门学习之旅(九) 3. ...

  5. INFINI Easysearch 与华为鲲鹏完成产品兼容互认证

    何为华为鲲鹏认证 华为鲲鹏认证是华为云围绕鲲鹏云服务(含公有云.私有云.混合云.桌面云)推出的一项合作伙伴计划,旨在为构建持续发展.合作共赢的鲲鹏生态圈,通过整合华为的技术.品牌资源,与合作伙伴共享商 ...

  6. invalid comparison: java.util.ArrayList and java.lang.String 异常分析及解决方法

    nvalid comparison: java.util.ArrayList and java.lang.String 异常解决方法异常原因首先我们可以确定是在mybatis的xml中的 list 操 ...

  7. mongodb创建索引和删除索引和背景索引background

    mongodb创建索引和删除索引和背景索引background MongoDB的背景索引允许在后台创建和重建索引,而不会对数据库的正常操作产生影响.背景索引的创建过程是非阻塞的,可以在业务运行时创建或 ...

  8. C# SM2算法 加密,解密,签名,验签

    最近时间在整SM2算法,在网上看到不少代码,基本都是使用BouncyCastle库,现在这个版本算比较好的拿来分享给大家. 首先引入包 Portable.BouncyCastle 完整代码见Gitee ...

  9. FEDORA34 安装CUDA11.3

    FEDORA34 安装CUDA11.3 首先确保能装上最新的显卡驱动.  FEDORA显卡驱动安装 然后去官网下fedora对应的.run安装文件.运行安装, 但不要选装驱动. 完成后加环境变量: # ...

  10. python重拾基础第三天

    本节内容 函数基本语法及特性 参数与局部变量 返回值 嵌套函数 递归 匿名函数 函数式编程介绍 高阶函数 内置函数 1. 函数基本语法及特性 背景提要 现在老板让你写一个监控程序,监控服务器的系统状况 ...