【代码随想录】LC 102. 二叉树的层序遍历

简介: 目录一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解 三、知识风暴

一、题目

1、原题链接

力扣


2、题目描述

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。


示例 1:

1.png





输入:root = [3,9,20,null,null,15,7]

输出:[[3],[9,20],[15,7]]


示例 2:

输入:root = [1]

输出:[[1]]


示例 3:

输入:root = []

输出:[]


提示:

树中节点数目在范围 [0, 2000] 内

-1000 <= Node.val <= 1000


二、解题报告

思路来源:讲透二叉树的层序遍历 | 广度优先搜索 | LeetCode:102.二叉树的层序遍历_哔哩哔哩_bilibili


卡哥yyds


1、思路分析

1)可以利用队列来进行层序遍历。

2)如果根结点为空,则直接返回结果数组;如果根结点非空,在每次遍历一层的过程中,针对该层中的每个结点,首先将结点入队,然后将该结点存下来,结点出队,用记录结点的变量来访问该节点的数值,并存到一维数组中,如果该结点有孩子,则将其对应的左/右孩子结点入队,直到遍历完该层结点。然后再以同样方式遍历下一层结点,直到队列为空(代表已经遍历完所有元素)。用lq来记录当前层的结点个数,针对每层,将每层遍历的结点的值存入一维数组中,每遍历完一层,再将该数组存入二维结果数组中,用来结果的返回。

3)注意lq不能用q.size()来代替,因为队列大小一直在变化,队列中会进入其他层的结点,我们只是用lq来记录当前遍历层的结点个数。

4)模拟上述过程,返回结果数组,即为所求。


2、时间复杂度

时间复杂度为O(n)


3、代码详解

/**

* Definition for a binary tree node.

* struct TreeNode {

*     int val;

*     TreeNode *left;

*     TreeNode *right;

*     TreeNode() : val(0), left(nullptr), right(nullptr) {}

*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}

*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}

* };

*/

class Solution {

public:

   vector<vector<int>> levelOrder(TreeNode* root) {

     vector<vector<int>> res;

     queue<TreeNode*> q;

     if(root)

        q.push(root);

     vector<int> v;

     while(!q.empty()){

        int lq=q.size();

        while(lq--){

         TreeNode *temp=q.front();

         q.pop();

         v.push_back(temp->val);

         if(temp->left)

             q.push(temp->left);

         if(temp->right)

             q.push(temp->right);    

     }

     res.push_back(v);

     v.clear();

   }

   return res;

   }

};

三、知识风暴

clear();//删除vector容器中的所有元素


目录
相关文章
|
3月前
|
算法 Java 索引
【算法】重建二叉树并进行后序遍历的Java实现
【算法】重建二叉树并进行后序遍历的Java实现
30 5
|
4月前
|
存储 算法 IDE
数据结构与算法⑯(第四章_下)二叉树的层序遍历+判断完全二叉树+一道OJ
数据结构与算法⑯(第四章_下)二叉树的层序遍历+判断完全二叉树+一道OJ
41 1
|
4月前
|
机器学习/深度学习
【二叉树 OJ题】二叉树基础知识 与 OJ题完成(二叉树构建与遍历问题,子树查找问题)
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。
33 1
|
11月前
|
算法
代码随想录 Day11 二叉树 LeetCode T144,145,94 前中后序遍历 (递归解法)
代码随想录 Day11 二叉树 LeetCode T144,145,94 前中后序遍历 (递归解法)
40 0
|
4月前
|
C++ 容器
『 C++ 』二叉树进阶OJ题(上)
『 C++ 』二叉树进阶OJ题(上)
『 C++ 』二叉树进阶OJ题(上)
|
4月前
二叉树基础OJ题
二叉树基础OJ题
32 1
|
4月前
|
C++ 容器
『 C++ 』二叉树进阶OJ题(中)
『 C++ 』二叉树进阶OJ题(中)
|
4月前
|
存储 C++ 容器
『 C++ 』二叉树进阶OJ题(下)
『 C++ 』二叉树进阶OJ题(下)
|
4月前
|
存储 算法
二叉树进阶OJ题
二叉树进阶OJ题
30 0
|
10月前
|
存储 算法
代码随想录算法训练营第十三天 | LeetCode 144. 二叉树的前序遍历、LeetCode 145. 二叉树的后序遍历、LeetCode 94. 二叉树的中序遍历
代码随想录算法训练营第十三天 | LeetCode 144. 二叉树的前序遍历、LeetCode 145. 二叉树的后序遍历、LeetCode 94. 二叉树的中序遍历
55 0