当前位置:网站首页>leetcode刷题:二叉树04(二叉树的层序遍历)
leetcode刷题:二叉树04(二叉树的层序遍历)
2022-07-04 03:51:00 【涛涛英语学不进去】
102.二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。

乍一看挺复杂,仔细做一下,一招秒。
package com.programmercarl.tree;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;
/** * @ClassName LevelOrder * @Descriotion TODO * @Author nitaotao * @Date 2022/7/3 11:55 * @Version 1.0 * https://leetcode.cn/problems/binary-tree-level-order-traversal/ * 102. 二叉树的层序遍历 **/
public class LevelOrder {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
Deque<TreeNode> deque = new ArrayDeque();
if (root == null) {
return result;
}
//入队
deque.offer(root);
while (!deque.isEmpty()) {
int size=deque.size();
List<Integer> floor = new ArrayList();
while (size > 0) {
//每次遍历一层
TreeNode node = deque.poll();
floor.add(node.val);
if (node.left != null) {
deque.offer(node.left);
}
if (node.right != null) {
deque.offer(node.right);
}
size--;
}
result.add(floor);
}
return result;
}
}
层序遍历,大 list
包小 list 。 每个小 list 为一层。
一层一层来,记录当前队列的长度,就是上一层有多少元素,这次就弹出多少次,把新元素继续加在队列尾部即可。
看了一下题解,我的属于广度优先遍历,还有深度优先遍历。
/** * 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>> resList = new ArrayList<List<Integer>>();
public List<List<Integer>> levelOrder(TreeNode root) {
checkFun01(root, 0);
return resList;
}
public void checkFun01(TreeNode node, Integer deep) {
if (node == null) {
return;
}
deep++;
if (resList.size() < deep) {
//当层级增加时,list的Item也增加,利用List的索引值进行层级结点
List<Integer> item = new ArrayList<>();
resList.add(item);
}
resList.get(deep - 1).add(node.val);
checkFun01(node.left, deep);
checkFun01(node.right, deep);
}
}

有一说一我看到不太懂,有点像先准备一个 List ,然后深度优先遍历,把结果按层序遍历的索引放上去。
边栏推荐
- 【愚公系列】2022年7月 Go教学课程 002-Go语言环境安装
- [untitled]
- vim正确加区间注释
- Brief explanation of depth first search (with basic questions)
- Simple dialogue system -- text classification using transformer
- 2021 RSC | Drug–target affinity prediction using graph neural network and contact maps
- Katalon中控件的参数化
- '2'&gt;' 10'==true? How does JS perform implicit type conversion?
- 疫情来袭--远程办公之思考|社区征文
- JDBC advanced
猜你喜欢

EV6 helps the product matrix, and Kia is making efforts in the high-end market. The global sales target in 2022 is 3.15 million?

The difference between bagging and boosting in machine learning

Flink学习8:数据的一致性

ctf-pikachu-CSRF

毕业设计:设计秒杀电商系统

Illustrated network: what is the hot backup router protocol HSRP?

拼夕夕二面:说说布隆过滤器与布谷鸟过滤器?应用场景?我懵了。。

LNK2038 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MDd_DynamicDebug”(main.obj 中)

Perf simple process for multithreaded profile

图解网络:什么是热备份路由器协议HSRP?
随机推荐
Lnk2038 detected a mismatch of "runtimelibrary": the value "md_dynamicrelease" does not match the value "mdd_dynamicdebug" (in main.obj)
Database SQL statement summary, continuous update
User defined path and file name of Baidu editor in laravel admin
新型数据中心,助力加快构建以数据为关键要素的数字经济
Interpretation of leveldb source code skiplist
How to dynamically cache components in Vue multi-level route nesting
Penetration practice - sqlserver empowerment
智慧地铁| 云计算为城市地铁交通注入智慧
如何有效远程办公之我见 | 社区征文
Katalon框架测试web(二十六)自动发邮件
支持首次触发的 Go Ticker
Objective-C member variable permissions
*. No main manifest attribute in jar
Pointer array and array pointer
ctf-pikachu-XSS
Two sides of the evening: tell me about the bloom filter and cuckoo filter? Application scenario? I'm confused..
Mitsubishi M70 macro variable reading Mitsubishi M80 public variable acquisition Mitsubishi CNC variable reading acquisition Mitsubishi CNC remote tool compensation Mitsubishi machine tool online tool
【微服务|openfeign】使用openfeign远程调用文件上传接口
[paddleseg source code reading] paddleseg custom data class
02 ls 命令的具体实现
