力扣226.翻转二叉树-递归

问题描述

翻转一棵二叉树,即将每个节点的左右子树进行交换。

示例:

text

复制代码
输入:
     4
   /   \
  2     7
 / \   / \
1   3 6   9

输出:
     4
   /   \
  7     2
 / \   / \
9   6 3   1

递归解法

思路分析

递归是解决二叉树问题的经典方法。翻转二叉树的核心思想是:对于每个节点,交换它的左右子树,然后递归地对左右子树进行同样的操作。

代码实现

java 复制代码
class Solution {
    public TreeNode invertTree(TreeNode root) {
        // 递归函数的终止条件,节点为空时返回
        if(root == null) {
            return null;
        }
        
        // 下面三句是将当前节点的左右子树交换
        TreeNode tmp = root.right;
        root.right = root.left;
        root.left = tmp;
        
        // 递归交换当前节点的左子树
        invertTree(root.left);
        // 递归交换当前节点的右子树
        invertTree(root.right);
        
        // 函数返回时就表示当前这个节点,以及它的左右子树都已经交换完了
        return root;
    }
}

时间复杂度分析

  • 时间复杂度:O(n),其中n是二叉树的节点数。每个节点都会被访问一次。

  • 空间复杂度:O(h),其中h是二叉树的高度。递归调用栈的深度等于树的高度,最坏情况下(树退化为链表)为O(n)。

其他递归写法

后序遍历版本

java 复制代码
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return null;
        }
        
        // 先递归翻转左右子树
        TreeNode left = invertTree(root.left);
        TreeNode right = invertTree(root.right);
        
        // 然后交换当前节点的左右子树
        root.left = right;
        root.right = left;
        
        return root;
    }
}

这种写法先递归处理子树,再交换当前节点的左右子树,是一种后序遍历的思路。

应用场景

  1. 镜像二叉树:判断两棵树是否互为镜像。

  2. 对称二叉树:判断一棵树是否对称。

  3. 图像处理:在某些图像处理算法中,需要翻转图像数据。

  4. 数据结构转换:在某些情况下,需要将树的结构进行镜像转换以满足特定需求。

注意事项

  1. 空树处理:总是要考虑输入为空树的情况。

  2. 递归深度:对于非常深的树,递归可能会导致栈溢出,此时应考虑迭代解法。

  3. 原地修改:所有解法都是原地修改树的结构,不需要额外的树空间。

总结

翻转二叉树是一个经典的递归问题,通过这个问题可以深入理解二叉树的遍历和递归思想。无论是递归还是迭代解法,核心都是交换每个节点的左右子树。理解这个问题的多种解法有助于提升对二叉树操作的掌握程度。

相关推荐
源码之屋几秒前
计算机毕业设计:Python天气数据采集与可视化分析平台 Django框架 线性回归 数据分析 大数据 机器学习 大模型 气象数据(建议收藏)✅
人工智能·python·深度学习·算法·django·线性回归·课程设计
我爱C编程1 分钟前
【3.2】FFT/IFFT变换的数学原理概述与MATLAB仿真
算法·matlab·fpga·fft·ifft
chao1898448 分钟前
基于改进二进制粒子群算法的含需求响应机组组合问题MATLAB实现
开发语言·算法·matlab
Imxyk16 分钟前
P9242 [蓝桥杯 2023 省 B] 接龙数列
c++·算法·图论
炽烈小老头20 分钟前
【每天学习一点算法 2026/04/10】Excel表列序号
学习·算法
郝学胜-神的一滴20 分钟前
二叉树后序遍历:从递归到非递归的优雅实现
数据结构·c++·程序人生·算法·
宝贝儿好22 分钟前
【LLM】第一章:分词算法BPE、WordPiece、Unigram、分词工具jieba
人工智能·python·深度学习·神经网络·算法·语言模型·自然语言处理
渡我白衣23 分钟前
运筹帷幄——在线学习与实时预测系统
人工智能·深度学习·神经网络·学习·算法·机器学习·caffe
colus_SEU24 分钟前
SVM 的终极视角:合页损失函数 (Hinge Loss) 与正则化
算法·机器学习·支持向量机
汀、人工智能26 分钟前
[特殊字符] 第71课:爬楼梯
数据结构·算法·数据库架构·图论·bfs·爬楼梯