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;
    }
};

总结

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

相关推荐
qinzechen7 分钟前
分享几个做题网站------学习网------工具网;
java·c语言·c++·python·c#
丶Darling.1 小时前
代码随想录 | Day26 | 二叉树:二叉搜索树中的插入操作&&删除二叉搜索树中的节点&&修剪二叉搜索树
开发语言·数据结构·c++·笔记·学习·算法
小飞猪Jay2 小时前
面试速通宝典——10
linux·服务器·c++·面试
yttandb2 小时前
重生到现代之从零开始的C语言生活》—— 内存的存储
c语言·开发语言·生活
结衣结衣.2 小时前
python中的函数介绍
java·c语言·开发语言·前端·笔记·python·学习
程序猿阿伟2 小时前
《C++高效图形用户界面(GUI)开发:探索与实践》
开发语言·c++
阿客不是客2 小时前
深入计算机语言之C++:C到C++的过度
c++
LN-ZMOI2 小时前
c++学习笔记1
c++·笔记·学习
no_play_no_games2 小时前
「3.3」虫洞 Wormholes
数据结构·c++·算法·图论
￴ㅤ￴￴ㅤ9527超级帅2 小时前
LeetCode hot100---数组及矩阵专题(C++语言)
c++·leetcode·矩阵