首页 > 其他分享 >leedcode 二叉树的最小深度

leedcode 二叉树的最小深度

时间:2024-02-21 10:24:55浏览次数:29  
标签:node right cur 最小 leedcode depth 二叉树 root left

自己写的:

# 二叉树节点的定义
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

class Solution:
    def minDepth(self, root: Optional[TreeNode]) -> int:
        # 如果根节点为空,深度为0
        if not root:
            return 0

        # 如果根节点没有左子树和右子树,深度为1
        if not root.left and not root.right:
            return 1

        # 如果只有右子树,返回右子树的深度加上当前层
        if not root.left and root.right:
            right_depth = self.cal_depth(root.right)
            return right_depth + 1

        # 如果只有左子树,返回左子树的深度加上当前层
        if root.left and not root.right:
            left_depth = self.cal_depth(root.left)
            return left_depth + 1

        # 如果同时有左子树和右子树,返回左右子树深度的较小值加上当前层
        if root.left and root.right:
            return min(self.cal_depth(root.left), self.cal_depth(root.right)) + 1

    # 计算树的深度
    def cal_depth(self, root):
        # 如果根节点为空,深度为0
        if not root:
            return 0

        queue = [root]
        depth = 0

        while queue:
            level_len = len(queue)

            for i in range(level_len):
                cur_node = queue.pop(0)

                # 如果当前节点是叶子节点,返回深度(当前层)
                if not cur_node.left and not cur_node.right:
                    return depth + 1

                # 将左子节点加入队列(如果存在)
                if cur_node.left:
                    queue.append(cur_node.left)
                # 将右子节点加入队列(如果存在)
                if cur_node.right:
                    queue.append(cur_node.right)

            # 完成一层遍历,深度加1
            depth += 1

        # 遍历完整个树后,返回深度
        return depth

gpt改进后:

class Solution:
    def minDepth(self, root: Optional[TreeNode]) -> int:
        if not root:
            return 0

        queue = [root]
        depth = 0

        while queue:
            # 记录当前层的节点数
            level_len = len(queue)
            depth += 1

            for i in range(level_len):
                # 弹出队列中的节点
                cur_node = queue.pop(0)

                # 如果当前节点是叶子节点,返回当前深度
                if not cur_node.left and not cur_node.right:
                    return depth

                # 将左子节点加入队列(如果存在)
                if cur_node.left:
                    queue.append(cur_node.left)
                # 将右子节点加入队列(如果存在)
                if cur_node.right:
                    queue.append(cur_node.right)

 

标签:node,right,cur,最小,leedcode,depth,二叉树,root,left
From: https://www.cnblogs.com/yyyjw/p/18024580

相关文章

  • input,type为number时隐藏点击按钮和限制输入最大最小值
    //隐藏点击按钮input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;}input[type='number']{-moz-appearance:textfield;}//解决输入中文后光标上移的问题.el-input__inner{line-height:1px!important;}//......
  • leedcode 平衡二叉树
    对称二叉树走不通  201/228 个通过的测试用例classSolution:defisBalanced(self,root:Optional[TreeNode])->bool:queue=[root]ifnotroot:returnTrueifnotroot.leftandnotroot.right:returnTr......
  • 【算法】【动态规划】最小路径和
    1 题目给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:一个机器人每次只能向下或者向右移动一步。示例1:输入:grid=[[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径1→3→1→1→1的总和最小。示例2......
  • winform实现最小化至系统托盘
    NotifyIcon类介绍NotifyIcon是.NET中的一个类,它用于在系统托盘中显示图标。这个类在System.Windows.Forms命名空间下。使用NotifyIcon类,你可以在系统托盘中创建一个图标,当用户点击或右键点击这个图标时,可以触发一些事件。例如,你可以创建一个上下文菜单(右键菜单),或者当用户......
  • (20/60)二叉搜索树的最小绝对差、二叉搜索树中的众数、二叉树的最近公共祖先
    过外婆八十寿宴,补卡二叉搜索树的最小绝对差leetcode:530.二叉搜索树的最小绝对差双指针中序遍历法思路搜索树的最小绝对差一定出现在中序遍历的相邻两个元素之间。设置前后两个指针,每次对比“历史最小”与当前node->val-pre->val的值哪个更小,进行相应更新。复杂度分析......
  • 二叉树(2)
    目录538把二叉搜索树转换为累加树538把二叉搜索树转换为累加树和平常的遍历顺序不同这题根据题意是需要取比当前节点大的所有数值的和而在二叉搜索树中,节点的大小关系是左<中<右所以自然而然地我们就得到了如下的遍历顺序:右->中->左classSolution{public:intvalue......
  • m基于码率兼容打孔LDPC码oms最小和译码算法的LDPC编译码matlab误码率仿真
    1.算法仿真效果matlab2022a仿真结果如下: 2.算法涉及理论知识概要       码率兼容打孔LDPC码BP译码算法是一种改进的LDPC译码算法,能够在不同码率下实现更好的译码性能。该算法通过在LDPC码中引入打孔操作,使得码率可以灵活地调整,同时利用BP(BeliefPropagation)译码算法......
  • 代码随想录算法训练营第二十天 | 236. 二叉树的最近公共祖先 , 501.二叉搜索树中的众
      530.二叉搜索树的最小绝对差 已解答简单 相关标签相关企业 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。差值是一个正数,其数值等于两值之差的绝对值。 示例1:输入:root=[4,2,6,1,3]输出:1示......
  • 「力扣」104. 二叉树的最大深度
    「力扣」104.二叉树的最大深度题目描述给定一个二叉树root,返回其最大深度。二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。示例1:输入:root=[3,9,20,null,null,15,7]输出:3示例2:输入:root=[1,null,2]输出:2提示:树中节点的数量在[0,10......
  • 代码随想录算法训练营第十九天 | 98.验证二叉搜索树, 700.二叉搜索树中的搜索,617.合并
     654.最大二叉树 已解答中等 相关标签相关企业 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树......