当前位置:网站首页>剑指 Offer 55 - I. 二叉树的深度
剑指 Offer 55 - I. 二叉树的深度
2022-07-28 21:53:00 【愈努力俞幸运】
剑指 Offer 55 - I. 二叉树的深度
https://leetcode.cn/problems/er-cha-shu-de-shen-du-lcof/
树的遍历方式总体分为两类:深度优先搜索(DFS)、广度优先搜索(BFS);
常见的 DFS : 先序遍历、中序遍历、后序遍历;
常见的 BFS : 层序遍历(即按层遍历)。
树的深度优先搜索往往利用 递归 或 栈 实现,本文使用递归实现。
方法一:先序遍历(DFS)
终止条件:叶子节点时比较最终结果res和这条路的深度的大小
递推参数:当前节点node,当前路的深度k
递推工作:遍历当前节点的左子节点和右子节点
class Solution:
def maxDepth(self, root):
def dfs(node,k):
if not node:
if self.res<k:
self.res=k
return
else:
return
k+=1
dfs(node.left,k)
dfs(node.right,k)
self.res=float("-inf")
dfs(root,0)
return self.res
求树的深度需要遍历树的所有节点,下面将介绍基于 后序遍历(DFS) 和 层序遍历(BFS) 的两种解法。
方法二:后序遍历(左右根)(DFS)
关键点: 此树的深度和其左(右)子树的深度之间的关系。显然,此树的深度 等于 左子树的深度 与 右子树的深度 中的 最大值 +1。
终止条件: 当 root 为空,说明已越过叶节点,因此返回 深度 0 。
递推工作: 本质上是对树做后序遍历。
计算节点 root 的 左子树的深度 ,即调用 maxDepth(root.left);
计算节点 root 的 右子树的深度 ,即调用 maxDepth(root.right);
返回值: 返回 此树的深度 ,即 max(maxDepth(root.left), maxDepth(root.right)) + 1。
class Solution:
def maxDepth(self, root):
def dfs(node):
if not node:return 0
return max(dfs(node.left),dfs(node.right))+1
return dfs(root)方法三:层序遍历(BFS)
树的层序遍历 / 广度优先搜索往往利用 队列 实现。
关键点: 每遍历一层,则计数器 +1 ,直到遍历完成,则可得到树的深度。
算法解析:
特例处理: 当 root 为空,直接返回 深度 0 。
初始化: 队列 queue (加入根节点 root ),计数器 res = 0。
循环遍历: 当 queue 为空时跳出。
初始化一个空列表 tmp ,用于临时存储下一层节点;
遍历队列: 遍历 queue 中的各节点 node ,并将其左子节点和右子节点加入 tmp;
更新队列: 执行 queue = tmp ,将下一层节点赋值给 queue;
统计层数: 执行 res += 1 ,代表层数加 1;
返回值: 返回 res 即可。
用列表实现队列
class Solution:
def maxDepth(self, root):
if not root:return 0
queue=[root]
res=0
while queue:
tmp = []
for node in queue:
if node.left:
tmp.append(node.left)
if node.right:
tmp.append(node.right)
queue=tmp
res+=1
return res用双向队列
import collections
class Solution:
def maxDepth(self, root):
if not root:return 0#注意树的深度为空
queue=collections.deque()
queue.append(root)
res=0
while queue:
tmp=collections.deque()
while queue:
node=queue.popleft()
if node.left:
tmp.append(node.left)
if node.right:
tmp.append(node.right)
queue=tmp
res+=1
return res边栏推荐
- 【自】-刷题-数组
- LabVIEW对VISA Write和Read函数的异步和同步
- Arduino uno driver universe 1.8 'TFT SPI screen example demonstration (including data package)
- 2022年G2电站锅炉司炉考试题库模拟考试平台操作
- Zero vision technology completed the pre-A round of financing and promoted the domestic replacement of intelligent driving platform software
- 字节8年女测试总监工作感悟—写给想转行或即将进入测试行业的女生们...
- 被忽视的智能电视小程序领域
- A new generation of ultra safe cellular battery, Sihao aipao, will be available from 139900 yuan
- Mongodb index add, view, export, delete
- 这款全网热评的无线路由器,到底有什么特别?
猜你喜欢

Byte 8 years' experience of female test Director - for girls who want to change careers or are about to enter the testing industry

刨根问底学 二叉树

字节8年女测试总监工作感悟—写给想转行或即将进入测试行业的女生们...

MySQL log management, backup and recovery

英特尔数据中心GPU正式发货,以开放灵活提供强劲算力

2022起重机械指挥考试题模拟考试平台操作

Intel data center GPU is officially shipped to provide strong computing power with openness and flexibility
![[self] - brush questions array](/img/a9/d12c41183df6961b2e9dd7cb49dfec.png)
[self] - brush questions array

2022G3锅炉水处理考试模拟100题模拟考试平台操作

【自】-刷题-数组
随机推荐
深度剖析集成学习Adaboost
金仓数据库 KingbaseES V8.3至V8.6迁移最佳实践(2. KingbaseES V8.3和 V8.6 兼容性)
2022年G2电站锅炉司炉考试题库模拟考试平台操作
深度剖析集成学习Xgboost
二舅火了,全网刷屏,他凭什么能治好我的精神内耗?
xss.haozi.me靶场详解
金仓数据库KingbaseES 客户端编程接口指南 - ODBC (2. 概述)
Wechat applet development ④
深度剖析集成学习Xgboost(续)
Compatibility description between kingbasees and Oracle (2. Data type)
Meet the outbreak period with the integration of transportation and parking, rush for mass production or build a technical moat?
MySQL functions
General paging - front desk
顶级“黑客”能厉害到什么地步?无信号也能上网,专家:高端操作!
CV目标检测模型小抄(2)
MyCms 自媒体商城 v3.6 发布,兼容微擎应用开发(Laravel框架)
集火全屋智能“后装市场”,真正玩得转的没几个
Objc4-841.13 debuggable / compiled source code update
General paging - background
What if win11 cannot find the DNS address? Win11 can't find DNS and can't access the web page solution