LeetCode 102 | 将二叉树中同层的元素归并在一起
今天是LeetCode专题第65篇文章,我们一起来聊聊LeetCode第102题Binary Tree Level Order Traversal(二叉树层次归类)。
题目简介
这道题的官方难度是Medium,我个人认为算是Medium-。点赞3324,反对只有79,好评如潮。通过率54.8%,通过率在Medium当中算是偏高的。
考察的要点主要在对二叉树和DFS(递归、深搜)的理解和运用,如果对于二叉树以及递归非常熟悉的话,这道题几乎没有难度。题目非常扎实,没有trick和陷阱。
题意
给定一个二叉树,要求我们将树上的元素根据所在的树深进行归类。也可以理解成横向的遍历这棵树,最后返回归类的结果。
这样描述有些干,我们来结合样例看下。
3
/
9 20
/
15 7
这棵二叉树,树深为0的点就只有一个3,所以这一层的元素是[3],树深为1的点有两个,分别是9和20。由于题目当中规定了从左往右遍历,所以结果是[9, 20]。第三层也很明显了,是[15, 7]。所以最终返回的结果就是:
[
[3],
[9,20],
[15,7]
]
题解
我们仔细来分析一下问题,可以发现本题的关键点有两个,一个是我们要按照树深来将这些元素归类。第二点是我们要保证元素按照从左到右的顺序存储。
第一个问题相对简单,我们只需要在使用dfs递归遍历树的时候传入一个树深的变量就可以了。这个也是常规操作,没有什么难度。所以稍微剩下的就是保证元素从左到右的顺序存储了,但稍微想一下就可以发现这其实也并不是什么问题。因为无论是先序、中序还是后序遍历,对于同一层的元素来说,一定是先左后右的。所以这并不是问题,我们只需要通过树深进行归类就可以了,得到的结果一定是满足题意的。
我们来看下代码就明白了,非常简单:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
ret = []
def dfs(u, d):
if u is None:
return
# 如果树深超过了ret的长度,那么末尾加入一个空的list
if d >= len(ret):
ret.append([])
# 这里采取的是后序遍历二叉树,其实是一样的
# 递归孩子节点的时候d+1,也就是树深增加了1
dfs(u.left, d+1)
dfs(u.right, d+1)
# 将当前元素append到ret[d]的list当中
ret[d].append(u.val)
dfs(root, 0)
return ret
今天的文章到这里就结束了,如果喜欢本文的话,请来一波素质三连,给我一点支持吧(关注、在看、点赞)。 - END -
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- MySQL 练习题和答案,以及运行结果截图
- 给你一个优秀的Django工程模板
- 纯css实现选项卡功能
- linux每日一练文件专题之常用文件命令(附昨日答案)
- 搞懂JavaScript全局变量与局部变量,看这篇文章就够了
- Day3-linux用户管理
- rbind的坑?
- 全文检索工具Lucene入门教程
- 数据库技术:数据库连接池,Commons DbUtils,批处理,元数据
- elasticsearch-快速入门
- 数据库技术:JDBC,预处理对象,事务控制
- elasticsearch-DSL高级查询语法
- 数据库技术:XML
- 利用logstash将mysql多表数据增量同步到es
- 纯CSS实现自定义单选框和复选框