leetcode 102.二叉树的层序遍历
难度:中等
频率: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.二叉树的层序遍历相关推荐
- LeetCode 102二叉树的层序遍历103二叉树锯齿形遍历104二叉树的最大深度
微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 97交错字符串(动态规划) LeetCode 98验证 ...
- Leetcode 102.二叉树的层序遍历 (每日一题 20210628)
给你一个二叉树,请你返回其按 层序遍历 得到的节点值. (即逐层地,从左到右访问所有节点).示例: 二叉树:[3,9,20,null,null,15,7],3/ \9 20/ \15 7 返回其层序遍 ...
- [leetcode]102.二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值. (即逐层地,从左到右访问所有节点). 示例: 二叉树:[3,9,20,null,null,15,7], 3/ \9 20/ \15 7 返回其层 ...
- 【LeetCode】【HOT】102. 二叉树的层序遍历(队列)
[LeetCode][HOT]102. 二叉树的层序遍历 文章目录 [LeetCode][HOT]102. 二叉树的层序遍历 package hot;import java.util.ArrayLis ...
- LeetCode Algorithm 102. 二叉树的层序遍历
102. 二叉树的层序遍历 Ideas 二叉树的层序遍历类似于图的广度优先搜索,都是要借助队列这种数据结构来实现. 首先将根节点添加到队列中,然后就是套BFS的模板,稍微改动一下. 只要队列不为空就循 ...
- 【代码随想录】LC 102. 二叉树的层序遍历
目录 一.题目 1.原题链接 2.题目描述 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.知识风暴 一.题目 1.原题链接 力扣 2.题目描述 给你二叉树的根节点 root ,返回其节 ...
- 102. 二叉树的层序遍历 golang
102. 二叉树的层序遍历 给你一个二叉树,请你返回其按 层序遍历 得到的节点值. (即逐层地,从左到右访问所有节点). 示例: 二叉树:[3,9,20,null,null,15,7], 3/ \9 ...
- 代码随想录算法训练营第15天,102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树
102.二叉树的层序遍历.226.反转二叉树.101.对称二叉树 102.二叉树的层序遍历 二叉树的层次遍历,我们可以定义一个队列, 当访问到某一个节点时,我们将它存在的左右节点放入队列中,便可达到按 ...
- 代码随想录算法训练营day15 | 102. 二叉树的层序遍历、226. 翻转二叉树、101. 对称二叉树
102. 二叉树的层序遍历 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {de ...
最新文章
- 视觉传感器:3D感知算法
- 【秋招必备】LeetCode神器,算法刷题宝典.pdf
- 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点
- pygame里面物体闪烁运动_Pygame-游戏中的运动
- 【报告分享】2020年B站UP主价值研究报告.pdf(附下载链接)
- 移动开发者走向全能开发者的五大技能
- 使用ActiveMQ实现简易聊天功能
- 【敏捷开发每日一贴】代码走查
- 公众平台服务号、订阅号、企业微信、小程序的区别
- Linux SD卡驱动开发
- 虚拟机中安装配置Windows server 2003和iis6
- 加利福尼亚大学圣地亚哥分校计算机科学专业,美国加州大学伯克利分校计算机专业排名一览...
- indesign页眉如何左右分布_InDesign排版技巧
- 计算机网络----宽带速度kbps、KB、Mbps
- excel行列互换_小白学Excel怎么做?|苦苦整理四小时!
- Python-Flask开发微电影网站(四)
- c语言单元测试(cunit)打桩,如何写打桩文件
- 【问】SQL 2012中如何还原数据库?
- jmeter接口测试之登录测试
- Win7怎么安装?推荐3种Windows7安装方法