6.6二叉树的最大深度(LC104-E)、N叉树的最大深度(LC559-E)

二叉树的最大深度:

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

二叉树的最大深度=二叉树的高度

算法:

这道题既可以求深度,也可以直接求高度。不过高度和深度用的遍历方式不同。

二叉树写代码之前要确定遍历顺序!

求高度(从下往上求高度):后序遍历(左右中)。先求左右孩子的最大高度(左右),再加上根节点的高度(中)。

求深度:前序遍历(中左右)。

调试过程:

递归法:

原因: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 0
        else:
            return self.getdepth(root)

    def getdepth(self,node:Optional[TreeNode])-> int:
        if node == None:
            return 0
        else:
            #左右
            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 = val
        self.children = children
"""
class Solution:
    def maxDepth(self, root: 'Node') -> int:
        if root == None:
            return 0
        else:
            depth = 1
            for 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)。

相关推荐
xuxigifxfh19 分钟前
牛客:HJ21 简单密码
java·开发语言·算法
qq_4086068622 分钟前
确界的倒数性质证明
学习·算法
小蒋观天下28 分钟前
【安防AI工程实战二】AI摄像头帧率抖动根治:ISP曝光时序与AI推理时序冲突深度定位
人工智能·深度学习·算法·安全·机器学习·ai大模型
云和数据.ChenGuang39 分钟前
trace 是RAG检索链路的**全链路追踪日志对象
人工智能·深度学习·算法·排序算法
Evand J41 分钟前
【PMSM例程6】永磁同步电机(PMSM)基于增广EKF的d-q轴电感分阶段辨识算法|电机参数估计与误差分析
算法·matlab·电机·ekf
垆边人似月.42 分钟前
华为题:最多可以参加的会议数目
数据结构·c++·算法
Tongzhi202643 分钟前
2026 年考勤行业趋势:考勤正在从“打卡工具“变成“人力成本中枢“
大数据·数据结构·数据仓库·科技·数据库开发
Matlab程序猿1 小时前
【MATLAB源码-第460期】基于matlab的OTFS通信系统SLM峰均比抑制及非线性功率放大器失真与误码性能仿真
开发语言·算法·matlab·slm·otfs
xiangyun611 小时前
C++ list 模拟实现(一):手撕双向链表,从节点到迭代器
数据库·c++·算法·链表·stl·list
码爸9 小时前
线性回归算法
算法·机器学习·线性回归