难度:中等
频率:150

题目:
给你一个二叉树,请你返回其层序遍历得到的节点值(逐层,从左到右访问所有节点)

做这道题 之前先回忆一下数据结构里的 BFS(Breath First Search,广度优先搜索)和DFS(Depth First Search)如何实现遍历。

  • DFS[递归方法]
void dfs(TreeNode root)
{if(root!=null)dfs(root.left);dfs(root.right);
}
  • BFS[使用队列数据结构]
void bfs(TreeNode root)
{Queue<TreeNode> queue=new ArrayDeque<>();queue.add(root);while(!queue.isEmpty()){TreeNode node = queue.poll();if(node.left!=null){queue.add(node.left);}if(node.right!=null){queue.add(node.right);}}
}

总结:BFS用来解决层级遍历问题,而DFS用来解决最短路径问题。

解题方法:BFS变形
解题思路:
1.在常规的BFS遍历中【队列】,加入一个参数,记录这一层的节点数量。
比如一开始root进入的时候,记录数量1。判断一左一右为一次。计次1次遍历,即遍历一棵小树。
然后进入2个,这个时候就会记录2。然后倒计时遍历2次,即遍历两个小树,或者理解为2个root。
2.每一次倒计时用一个arraylist,每次队列出去的数,都放在arraylist里。
3.最后再用一个大的arraylist,把之前每一次的arraylist装起来。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> res=new ArrayList<>();Queue<TreeNode>queue=new ArrayDeque();if(root!=null)queue.add(root);while(!queue.isEmpty()){int n=queue.size();List<Integer> arr = new ArrayList();for(int i=0;i<n;i++){TreeNode node =queue.poll(); arr.add(node.val);if(node.left!=null){queue.add(node.left);}if(node.right!=null){queue.add(node.right);}}res.add(arr);}  return res;}}

PS:易错点

  • 双向队列里面装的是树节点,不是普通类型。
  • 一开始的根节点需要判断是否为空。
  • list添加的都是值,不是树节点。
  • 队列的里节点的数量 是 queue.size()。
  • list里套list。二位数组。

leetcode 102.二叉树的层序遍历相关推荐

  1. LeetCode 102二叉树的层序遍历103二叉树锯齿形遍历104二叉树的最大深度

    微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 97交错字符串(动态规划) LeetCode 98验证 ...

  2. Leetcode 102.二叉树的层序遍历 (每日一题 20210628)

    给你一个二叉树,请你返回其按 层序遍历 得到的节点值. (即逐层地,从左到右访问所有节点).示例: 二叉树:[3,9,20,null,null,15,7],3/ \9 20/ \15 7 返回其层序遍 ...

  3. [leetcode]102.二叉树的层序遍历

    给你一个二叉树,请你返回其按 层序遍历 得到的节点值. (即逐层地,从左到右访问所有节点). 示例: 二叉树:[3,9,20,null,null,15,7], 3/ \9 20/ \15 7 返回其层 ...

  4. 【LeetCode】【HOT】102. 二叉树的层序遍历(队列)

    [LeetCode][HOT]102. 二叉树的层序遍历 文章目录 [LeetCode][HOT]102. 二叉树的层序遍历 package hot;import java.util.ArrayLis ...

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

    102. 二叉树的层序遍历 Ideas 二叉树的层序遍历类似于图的广度优先搜索,都是要借助队列这种数据结构来实现. 首先将根节点添加到队列中,然后就是套BFS的模板,稍微改动一下. 只要队列不为空就循 ...

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

    目录 一.题目 1.原题链接 2.题目描述 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.知识风暴 一.题目 1.原题链接 力扣 2.题目描述 给你二叉树的根节点 root ,返回其节 ...

  7. 102. 二叉树的层序遍历 golang

    102. 二叉树的层序遍历 给你一个二叉树,请你返回其按 层序遍历 得到的节点值. (即逐层地,从左到右访问所有节点). 示例: 二叉树:[3,9,20,null,null,15,7], 3/ \9 ...

  8. 代码随想录算法训练营第15天,102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树

    102.二叉树的层序遍历.226.反转二叉树.101.对称二叉树 102.二叉树的层序遍历 二叉树的层次遍历,我们可以定义一个队列, 当访问到某一个节点时,我们将它存在的左右节点放入队列中,便可达到按 ...

  9. 代码随想录算法训练营day15 | 102. 二叉树的层序遍历、226. 翻转二叉树、101. 对称二叉树

    102. 二叉树的层序遍历 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {de ...

最新文章

  1. 视觉传感器:3D感知算法
  2. 【秋招必备】LeetCode神器,算法刷题宝典.pdf
  3. 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点
  4. pygame里面物体闪烁运动_Pygame-游戏中的运动
  5. 【报告分享】2020年B站UP主价值研究报告.pdf(附下载链接)
  6. 移动开发者走向全能开发者的五大技能
  7. 使用ActiveMQ实现简易聊天功能
  8. 【敏捷开发每日一贴】代码走查
  9. 公众平台服务号、订阅号、企业微信、小程序的区别
  10. Linux SD卡驱动开发
  11. 虚拟机中安装配置Windows server 2003和iis6
  12. 加利福尼亚大学圣地亚哥分校计算机科学专业,美国加州大学伯克利分校计算机专业排名一览...
  13. indesign页眉如何左右分布_InDesign排版技巧
  14. 计算机网络----宽带速度kbps、KB、Mbps
  15. excel行列互换_小白学Excel怎么做?|苦苦整理四小时!
  16. Python-Flask开发微电影网站(四)
  17. c语言单元测试(cunit)打桩,如何写打桩文件
  18. 【问】SQL 2012中如何还原数据库?
  19. jmeter接口测试之登录测试
  20. Win7怎么安装?推荐3种Windows7安装方法

热门文章

  1. 字符编码相关知识总结
  2. 流行的jQuery信息提示插件(jQuery Tooltip Plugin)
  3. Asp.net中防止用户多次登录的方法
  4. 数组常见的遍历循环方法、数组的循环遍历的效率对比
  5. LaTex 使用特殊章节符号 (§)
  6. Java必备:java入门、java学习
  7. awstats 安装与配置
  8. gpu programming guide for g80(dx9)
  9. 虚拟实验室中的事务管理系统(一、概述)
  10. 递归算法小结(数的阶乘、斐波那契和汉诺塔问题)