代码随想录 | 104.二叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数

104.二叉树的最大深度

思路

使用后序遍历,计算二叉树的高度,到根节点的高度既二叉树的最大深度

# 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:
        #递归函数
        def Depth(root):
            if not root:
                return 0
            leftheight = Depth(root.left) #遍历左子树
            rightheight = Depth(root.right) #遍历右子树
            result = 1 + max(leftheight, rightheight) #将其最大值加1
            return result

        return Depth(root)

111.二叉树的最小深度

思路 

与求最大深度相似,依旧使用后序遍历

代码

后序遍历 递归法

# 二叉树节点的定义
# 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:
        # 辅助函数,用于计算节点的深度
        def getDepth(node):
            # 基本情况:如果节点为None,则深度为0
            if not node:
                return 0
            
            # 递归计算左右子树的深度
            left = getDepth(node.left)
            right = getDepth(node.right)
            
            # 检查子节点是否有一个为None,并返回非None子节点的深度
            if node.left != None and node.right == None:
                return 1 + left
            if node.left == None and node.right != None:
                return 1 + right           
            
            # 如果两个子节点都存在,则返回两个子树深度的最小值加1
            result = 1 + min(left, right)
            return result
        
        # 调用辅助函数计算二叉树的最小深度
        return getDepth(root)

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

思路

与计算深度类似,记录遍历的节点数量就可以

代码

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

class Solution:
    def countNodes(self, root: Optional[TreeNode]) -> int:
        # 辅助函数,用于计算节点的数量
        def getNodes(node):
            # 基本情况:如果节点为None,则节点数量为0
            if node == None:
                return 0
            
            # 递归计算左右子树的节点数量
            left = getNodes(node.left)
            right = getNodes(node.right)
            
            # 当前节点 + 左子树节点数量 + 右子树节点数量
            result = 1 + left + right
            return result
        
        # 调用辅助函数计算二叉树的节点数量
        return getNodes(root)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值