当前位置: 首页 > news >正文

代码随想录算法训练营第十四天| 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度

今日题目

226.翻转二叉树 

题目链接:226. 翻转二叉树 - 力扣(LeetCode)

思考:翻转二叉树,就是对每一个根节点,都交换左右节点,左右节点进入递归继续交换它们的左右节点。

代码:

# 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 invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        if not root:
            return root
        left = self.invertTree(root.left)
        right = self.invertTree(root.right)
        root.left, root.right = right, left
        return root
101. 对称二叉树 

题目链接:101. 对称二叉树 - 力扣(LeetCode)

思考:如果一个二叉树轴对阵,也就是左子树和右子树完全一样。换个角度,将这个二叉树复制一份,则有两个二叉树AB,A的左子树与B的右子树完全一样,A的右子树与B的左子树完全一样。

完全一样就是要么都为空,要么都不为空且两个节点值相等,两个节点的左右子树镜像相等(即A的左子树与B的右子树完全一样,A的右子树与B的左子树完全一样)。

代码:

# 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 isMirror(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
        if not p and not q:
            return True
        if not p or not q:
            return False
        return p.val == q.val and self.isMirror(p.left, q.right) and self.isMirror(q.left, p.right)
        
    def isSymmetric(self, root: Optional[TreeNode]) -> bool:
        return self.isMirror(root, root)
104.二叉树的最大深度 

题目链接:104. 二叉树的最大深度 - 力扣(LeetCode)

思考:二叉树的最大深度,即左右子树的最大深度+1,具有最大深度的路径一定在二叉树的最底层,因此进行递归,直到左右子树为空,即从最末一层节点开始,然后逐级向上+1进行递归。

代码:

# 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 not root:
            return 0
        return 1 + max(self.maxDepth(root.left), self.maxDepth(root.right))
111.二叉树的最小深度 

题目链接:111. 二叉树的最小深度 - 力扣(LeetCode)

思考:二叉树的最小深度,需要找到根节点到叶子结点的最小距离。所谓叶子结点,就是没有子节点的子节点。因此主要判断依据还是左右节点是否存在,通过递归方法,找到左右子树的最小深度。

代码:

# 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 minDepth(self, root: Optional[TreeNode]) -> int:
        if not root:
            return 0

        if not root.left and root.right:
            return 1 + self.minDepth(root.right)

        if root.left and not root.right:
            return 1 + self.minDepth(root.left)

        return 1 + min(self.minDepth(root.left), self.minDepth(root.right))

相关文章:

  • ​​​​​​​深入解析外观模式(Facade Pattern)及其应用 C#
  • Python(request库)
  • c#难点整理3
  • C# Modbus RTU学习记录
  • Qt Concurrent Filter and Filter-Reduce
  • 雨晨 Windows 11 企业版 24H2 轻装版 26200.5510
  • 技术团队评估需求开发成本远超预期,如何应对
  • JS闭包--函数式编程的核心概念
  • Springboot 集成 Flowable 6.8.0
  • docker远程debug
  • SpringBoot项目图片上传成功,访问404
  • WordPress自动代码高亮插件Code Prettify插件
  • function、var、let 和 const 用于不同的声明场景
  • 【Linux进程】理解进程地址空间
  • 8.非监督学习与关系挖掘:聚类分析、客户细分、关联规则与协同过滤的全面解析——Python数据挖掘代码实践
  • 通过php连接redis数据库
  • 网络安全之STP(1)
  • Kotlin泛型: 协变|逆变|不变
  • mysql慢查询日志
  • Python - 爬虫-网页抓取数据-工具wget
  • 建设信用卡积分商城网站/微信营销案例
  • 天津建网站/企业关键词优化推荐
  • 网站开发设计师岗位职责/流量精灵app
  • 国内网站开发 框架/seo怎么推广
  • 辽宁建设工程信息网招标/邯郸网站优化
  • 做图片的网站都有哪些/友情链接图片