代码随想录算法训练营Day 15 104.二叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

104.二叉树的最大深度

力扣题目链接

class solution:
    def maxdepth(self, root: treenode) -> int:
        return self.getdepth(root)
        
    def getdepth(self, node):
        if not node:
            return 0
        leftheight = self.getdepth(node.left) #左
        rightheight = self.getdepth(node.right) #右
        height = 1 + max(leftheight, rightheight) #中
        return height

这段代码是定义了一个名为"Solution"的类,其中有两个方法:

  1. maxdepth:这个方法接收一个名为root的参数,代表一个二叉树的根节点。它调用了另一个名为getdepth的方法来获取树的高度,然后返回这个高度。
  2. getdepth:这个方法接收一个名为node的参数,代表二叉树的一个节点。首先,如果这个节点是空的(即没有节点),它返回0,因为空树的高度为0。然后,它分别递归地计算左子树和右子树的高度,并选取其中较高的一个,再加上1(代表当前节点),得到树的总高度,最后返回这个总高度。

111.二叉树的最小深度

力扣题目链接

class Solution:
    def getDepth(self, node):
        if node is None:
            return 0
        leftDepth = self.getDepth(node.left)  # 左
        rightDepth = self.getDepth(node.right)  # 右
        
        # 当一个左子树为空,右不为空,这时并不是最低点
        if node.left is None and node.right is not None:
            return 1 + rightDepth
        
        # 当一个右子树为空,左不为空,这时并不是最低点
        if node.left is not None and node.right is None:
            return 1 + leftDepth
        
        result = 1 + min(leftDepth, rightDepth)
        return result

    def minDepth(self, root):
        return self.getDepth(root)
  • 第1行:定义了一个名为Solution的类。
  • 第2行:定义了一个名为getDepth的方法,它接受一个名为node的参数。
  • 第3行:如果node为空,即二叉树为空树,返回0。
  • 第5行:递归调用getDepth方法,传入node的左子节点,计算左子树的深度。
  • 第6行:递归调用getDepth方法,传入node的右子节点,计算右子树的深度。
  • 第9行:当一个左子树为空,右子树不为空时,当前节点并不是最低点,返回1加上右子树的深度。
  • 第13行:当一个右子树为空,左子树不为空时,当前节点并不是最低点,返回1加上左子树的深度。
  • 第17行:计算当前节点的深度,为1加上左子树深度和右子树深度的较小值。
  • 第18行:返回当前节点的深度。

这段代码通过递归的方式计算二叉树的最小深度。如果二叉树为空,返回0;否则,分别计算左子树和右子树的深度。在计算过程中,如果一个子树为空而另一个子树不为空,那么当前节点并不是最低点,需要继续向下遍历。最终返回根节点的最小深度作为整个二叉树的最小深度。

 

222.完全二叉树的节点个数

力扣题目链接(opens new window)

给出一个完全二叉树,求出该树的节点个数。

class Solution:
    def countNodes(self, root: TreeNode) -> int:
        return self.getNodesNum(root)
        
    def getNodesNum(self, cur):
        if not cur:
            return 0
        leftNum = self.getNodesNum(cur.left) #左
        rightNum = self.getNodesNum(cur.right) #右
        treeNum = leftNum + rightNum + 1 #中
        return treeNum

这段代码是一个计算二叉树节点数量的函数。下面是代码的详细解释:

  1. 首先,我们定义了一个类Solution,其中包含两个方法:countNodesgetNodesNum
  2. countNodes方法是给定的,它接受一个二叉树的根节点作为参数(类型为TreeNode),并返回整数值,即二叉树的节点数量。
  3. getNodesNum方法是一个私有方法,用于计算二叉树的节点数量。它接受一个当前节点作为参数(类型为cur)。
  4. getNodesNum方法中,我们首先检查当前节点是否为空。如果为空,说明这是一个空树,因此返回0。
  5. 接下来,我们递归地调用getNodesNum方法来计算左子树的节点数量,并将结果保存在变量leftNum中。
  6. 然后,我们递归地调用getNodesNum方法来计算右子树的节点数量,并将结果保存在变量rightNum中。
  7. 最后,我们计算整个树的节点数量,即将左子树的节点数量、右子树的节点数量和当前节点(根节点)加起来,并将结果保存在变量treeNum中。
  8. 返回treeNum作为最终的节点数量。

注意:在给定的代码中,我们假设二叉树的节点类型为TreeNode,并且具有leftright属性分别表示左子树和右子树。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值