6.6二叉树的最大深度(LC104
6.6二叉树的最大深度(LC104
二叉树的最大深度:
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
二叉树的最大深度=二叉树的高度
算法:
这道题既可以求深度,也可以直接求高度。不过高度和深度用的遍历方式不同。
二叉树写代码之前要确定遍历顺序!
求高度(从下往上求高度):后序遍历(左右中)。先求左右孩子的最大高度(左右),再加上根节点的高度(中)。
求深度:前序遍历(中左右)。
调试过程:
递归法:
原因:node可能为空,我没判断node非空
正确代码:
# 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 maxDepth(self, root: Optional[TreeNode]) -> int:if root == None:return 0else:return self.getdepth(root)def getdepth(self,node:Optional[TreeNode])-> int:if node == None:return 0else:#左右leftheight = self.getdepth(node.left)rightheight = self.getdepth(node.right)#中depth = 1+max(leftheight,rightheight)return depth
时间空间复杂度:
- 时间复杂度: 该代码使用递归方法计算二叉树的最大深度。在最坏的情况下,当二叉树完全不平衡并且类似于链表时,代码将恰好访问每个节点一次。因此,代码的时间复杂度为O(n),其中n是二叉树中的节点数。
- 空间复杂度: 代码的空间复杂度由二叉树的最大深度决定。在最坏的情况下,当二叉树完全不平衡并且类似于链表时,最大深度(高度)将等于树中的节点数。因此,代码的空间复杂度为O(n),其中n是二叉树中的节点数。
- 总体而言,该代码的时间复杂度为O(n),空间复杂度为O(n)。
N叉树的最大深度:
算法:
求高度(从下往上求高度):先求根节点所有子树的最大高度,再加上根节点的高度。
N叉树的定义(要会写!):
class Node:def __init__(self, val=None, children=None):self.val = val
#children就是根节点的孩子self.children = children
调试过程:
递归法:
原因:
错误是在 `for
` 循环中尝试使用变量 `depth
`,但在循环之前没有初始化该变量。这导致在 `return depth
` 语句处引发了 `UnboundLocalError
` 错误。
要解决这个问题,可以在 `maxDepth
` 方法之前初始化 `depth
` 变量
正确代码:
"""
# Definition for a Node.
class Node:def __init__(self, val=None, children=None):self.val = valself.children = children
"""
class Solution:def maxDepth(self, root: 'Node') -> int:if root == None:return 0else:depth = 1for children in root.children:depth = max(depth, self.maxDepth(children)+1)return depth
时间空间复杂度:
时间复杂度: 修复后的代码使用递归方法计算 N 叉树的最大深度。在最坏的情况下,当 N 叉树完全不平衡时,代码将访问每个节点一次。因此,时间复杂度为 O(n),其中 n 是 N 叉树中的节点数。
空间复杂度: 修复后的代码的空间复杂度由递归调用栈的深度决定。在最坏的情况下,当 N 叉树完全不平衡时,递归调用栈的深度将等于树的高度。因此,空间复杂度为 O(h),其中 h 是 N 叉树的高度。
总体而言,代码的时间复杂度为 O(n),空间复杂度为 O(h)。
最新文章
- 使用ping命令确定网络故障所在的方法
- 【ArcGIS Pro微课1000例】0031:las点云提取(根据范围裁剪点云)
- 【腾讯云 HAI域探秘】——自行搭建Stable Diffusion模型服务用于生成AI图片
- 臀部筋膜炎怎么治疗最有效
- 学生用台灯什么光对眼睛好?分享专业的学生护眼台灯
- Zookeeper篇
- 深入了解鼠标光标的设置过程
- conda从4.12升级到最新版23.9 自动升级失败 手动无损升级方法
- swagger精度丢失,postman调用正常,dameng数据库,long类型字段
- 聊聊logback的DuplicateMessageFilter
- XML Web 服务 Eclipse实现中的sun
- nmap原理与使用
- 【Axure高保真原型】3D饼图
- php和java对比
- 互联网Java工程师面试题·微服务篇·第三弹
- 【Vue】过滤器Filters
- Java 单元测试最佳实践:如何充分利用测试自动化