C/C++ BM33 二叉树的镜像

文章目录

前言

镜像说的好听,无非就是换下节点。


题目

操作给定的二叉树,将其变换为源二叉树的镜像。

数据范围:二叉树的节点数 0 ≤ n ≤ 1000 0≤n≤1000 0≤n≤1000, 二叉树每个节点的值 0 ≤ v a l ≤ 1000 0≤val≤1000 0≤val≤1000

要求: 空间复杂度 O ( n ) O(n) O(n) 。本题也有原地操作,即空间复杂度 O ( 1 ) O(1) O(1)的解法,时间复杂度 O ( n ) O(n) O(n)

源二叉树

镜像二叉树

输入:{8,6,10,5,7,9,11}

返回值:{8,10,6,11,9,7,5}

示例2

输入:{}

返回值:{}

解决方案一

1.1 思路阐述

这个镜像其实就是交换下左右子树的节点罢了。

树的问题还是一样:拆分。

将一棵树进行镜像实际上就是对除了根节点外的所有节点与同属于同一个父节点的兄弟节点交换。

这里我们考虑根节点的为空的特殊情况进行单独返回。

后面就是把根节点下面的两个子节点进行交换,这里交换使用了一个temp的变量。

交换,这里是交换子树,不仅仅是交换值这么简单。所以第一次交换完之后,其实是左右子树都交换了。

接着对左右子树做同样的操作,直到轮到叶子结点。

通俗来讲,就是一个递归调用。大树分左树和右树。

时间复杂度分析:

对于每个节点,函数执行一些固定的操作,例如交换左右子树的指针,并对左右子树进行递归调用。因此,对于具有 n 个节点的二叉树,每个节点的操作时间是常数时间,因此时间复杂度为 O(n)。

空间复杂度分析:

递归调用会在函数调用栈上占用空间。在最坏的情况下,递归深度等于树的高度,因此空间复杂度取决于树的高度。对于平衡二叉树,空间复杂度为 O(log n),其中 n 是节点数。对于不平衡的二叉树,空间复杂度可以达到 O(n),因为递归调用可能会一直延伸到树的最深处。

综上所述,时间复杂度为 O ( n ) O(n) O(n),空间复杂度在最坏的情况下为 O ( n ) O(n) O(n),在最好的情况下为 O ( l o g n ) O(log n) O(logn)。

1.2 源码

cpp 复制代码
/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pRoot TreeNode类 
     * @return TreeNode类
     */

    TreeNode* Mirror(TreeNode* pRoot) {
        if (!pRoot)
            return nullptr;

        if(pRoot->left||pRoot->right)
        {
            TreeNode *temp=pRoot->left;
            pRoot->left=pRoot->right;
            pRoot->right=temp;
        }
        pRoot->left=Mirror(pRoot->left);
        pRoot->right=Mirror(pRoot->right);
        return pRoot;
    }
};

总结

看了下官方的题解,还有个是栈的,感觉差不多,这里就没贴了。思路都是一样的。

相关推荐
Old_Driver_Lee34 分钟前
C语言常用语句
c语言·开发语言
松涛和鸣1 小时前
从零开始理解 C 语言函数指针与回调机制
linux·c语言·开发语言·嵌入式硬件·排序算法
无限进步_4 小时前
C语言动态内存的二维抽象:用malloc实现灵活的多维数组
c语言·开发语言·数据结构·git·算法·github·visual studio
招摇的一半月亮6 小时前
P2242 公路维修问题
数据结构·c++·算法
星轨初途6 小时前
数据结构排序算法详解(5)——非比较函数:计数排序(鸽巢原理)及排序算法复杂度和稳定性分析
c语言·开发语言·数据结构·经验分享·笔记·算法·排序算法
f***01937 小时前
CC++链接数据库(MySQL)超级详细指南
c语言·数据库·c++
合方圆~小文7 小时前
球型摄像机作为现代监控系统的核心设备
java·数据库·c++·人工智能
椰萝Yerosius8 小时前
[题解]2024CCPC郑州站——Z-order Curve
c++·算法
小曹要微笑8 小时前
STM32F7 时钟树简讲(快速入门)
c语言·stm32·单片机·嵌入式硬件·算法
前端世界10 小时前
float 还是 double?用储罐体积计算带你看懂 C 语言浮点数的真实世界坑
java·c语言·开发语言