【LeetCode226】翻转二叉树

题目描述

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

思路与算法

这个问题自然是递归的,因为反转一棵树涉及到反转它的子树。

让 f(node) 是一个函数,用于反转以 node 为根的二叉树。如果 node 有左子树 L 和右子树 R,那么根据定义,反转以 node 为根的树是通过首先反转右子树 R 得到 f®,反转左子树 L 得到 f(L),然后交换这两个反转后的子树。用公式表示,我们可以写为:

f(node)=Node(node.val,left=f(node.right),right=f(node.left))

  • Base Case: 如果当前节点是 None ,那么没有什么可以反转的,因此我们返回 None
  • 递归步骤:对于每个节点
    • 递归地反转它的左子树
    • 递归地反转它的右子树
    • 交换这两个反转的子树

代码

python 复制代码
# 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 None
        inverted_left = self.invertTree(root.right)
        inverted_right = self.invertTree(root.left)

        root.left = inverted_left
        root.right = inverted_right
        return root
        

总结

假设你有一个大盒子,里面装着一个小盒子,小盒子里又装着更小的盒子......一直到最小的盒子里什么都没有。每个盒子的结构都和大盒子一样,只不过尺寸变小了。解决问题的时候,你可以先解决最小盒子的问题,再一层一层往外解决,这就是递归的做法。

递归就是类似这种"在里面还藏着同样的东西"的思想。(同样的东西,或许是同样的函数映射)

简单来说,递归思想就是把一个大问题拆成和原问题很像但更小的问题,一直拆到最简单的时候再一步步合起来解决。这样的方法就叫做递归。

形成递归解决方案/形成递归结构的通用模式

  1. 确定base case(s):
    • 确定可以直接解决的最简单问题实例。
    • base case停止递归,防止无限循环
    • 在树问题中,base case通常是当前节点为 null(或当你到达叶子节点时)
  2. 拆解问题
    • 确保子问题在性质上与原始问题相似。
    • 在二叉树的翻转中,翻转整个树的问题简化为翻转左子树和右子树。
  3. 定义递归步骤
    • 清楚地表达问题的解决方案如何依赖于其子问题的解决方案
    • 形式举例:f(node)=Node(node.val,left=f(node.right),right=f(node.left)),这个方程清楚地表达了整个树的解(即 f(node))是如何依赖于其子问题的解(即 f(node.left) 和 f(node.right))。
  4. 组合子问题的解决方案
    • 例如:在反转子树后,交换它们以形成反转树。
  5. 注意
    • 不正确或缺失的基例可能导致无限递归或错误的结果
    • 确保每个递归调用都是在一个严格更小或更简单的问题实例上
相关推荐
倒头就睡的小比特1 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼1 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光1 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark1 天前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her11 天前
并查集-听课笔记
笔记·算法·并查集
码流子1 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven1 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark1 天前
从算法设计模式看编程思维的抽象能力4
算法
2601_962218611 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法