(树) 剑指 Offer 27. 二叉树的镜像 ——【Leetcode每日一题】

news2024/9/22 1:43:38

❓剑指 Offer 27. 二叉树的镜像

难度:简单

请完成一个函数,输入一个二叉树,该函数输出它的镜像。

例如输入:

     4

   /   \

  2     7

 / \   / \

1   3 6   9

镜像输出:

     4

   /   \

  7     2

 / \   / \

9   6 3   1

示例 1:

输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]

限制

  • 0 <= 节点个数 <= 1000

注意:本题与 226. 翻转二叉树 相同。

💡思路:递归

我们从根节点开始,递归地对树进行遍历:

  • 如果当前遍历到的节点 rootnull ,则直接返回 null;
  • 如果当前遍历到的节点 root 不为 null,那么我们只需要 交换两棵子树的位置,且分别递归调用 mirrorTree 函数,返回根节点 root

🍁代码:(C++、Java)

C++

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* mirrorTree(TreeNode* root) {
        if(root == nullptr) return nullptr;
        TreeNode* temp = mirrorTree(root->left);
        root->left = mirrorTree(root->right);
        root->right = temp;
        return root;
    }
};

Java

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode mirrorTree(TreeNode root) {
        if(root == null) return null;
        TreeNode temp = mirrorTree(root.left);
        root.left = mirrorTree(root.right);
        root.right = temp;
        return root;
    }
}

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n ) O(n) O(n),其中 n 二叉树节点的数目。我们会遍历二叉树中的每一个节点,对每个节点而言,我们在常数时间内交换其两棵子树。。
  • 空间复杂度 O ( n ) O(n) O(n),使用的空间由递归栈的深度决定,它等于当前节点在二叉树中的高度。在平均情况下,二叉树的高度与节点个数为对数关系,即 O ( l o g ⁡ n ) O(log⁡ n) O(logn)。而在最坏情况下,树形成链状,空间复杂度为 O ( n ) O(n) O(n)

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

注: 如有不足,欢迎指正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/811882.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

给你一个项目,你将如何开展性能测试工作?

一、性能三连问 1、何时进行性能测试&#xff1f; 性能测试的工作是基于系统功能已经完备或者已经趋于完备之上的&#xff0c;在功能还不够完备的情况下没有多大的意义。因为后期功能完善上会对系统的性能有影响&#xff0c;过早进入性能测试会出现测试结果不准确、浪费测试资…

We are the Lights - 思维

分析&#xff1a; 每次操作会把上一次的状态覆盖&#xff0c;但是从后往前操作可以保留最后一次覆盖&#xff0c;每一个位置最后的覆盖状态一定是最终状态&#xff0c;因此可以存下来从后往前记录第一次覆盖的状态并计数。 代码&#xff1a; #include <bits/stdc.h>usi…

玩转LaTeX(一)【源文件基本结构、中文处理方法、中英文的字体字号设置、文档基本结构】

latex源文件基本结构&#xff1a; 【在latex中一般分为两个区&#xff0c;一个是导言区&#xff0c;一个是正文区&#xff08;文稿区&#xff09;】 %导言区(主要进行全局设置)%一个latex文件&#xff0c;只能有且只有一个document环境\documentclass{article} %除article类外…

OpenHarmony开源鸿蒙学习入门 - 基于3.2Release 应用开发环境安装

OpenHarmony开源鸿蒙学习入门 - 基于3.2Release 应用开发环境安装 基于目前官方master主支&#xff0c;最新文档版本3.2Release&#xff0c;更新应用开发环境安装文档。 一、安装IDE&#xff1a; 1.IDE安装的系统要求 2.IDE下载官网链接&#xff08;IDE下载链接&#xff09; …

【论文精读】Self-Attentive Assocative Memory,2020

目录 1 引言2 Outer product attention (OPA)3 Self-attentive Associative Memory (SAM)4 SAM-based Two-Memory Model (STM)4.1 M i M^i Mi写操作4.2 M r M^r Mr读操作4.3 M i M^i Mi读操作和 M r M^r Mr写操作过程4.4 用 M r M^r Mr实现item转移4.5 模型输出 o t o_t ot​…

C语言手撕顺序表

目录 一、概念 1、静态顺序表&#xff1a;使用定长数组存储元素。 2、动态顺序表&#xff1a;使用动态开辟的数组存储 二、接口实现 1、对顺序表的初始化 2、对数据的销毁 3、对数据的打印 4、检查是否需要扩容 5、尾插 6、头插 7、尾删 8、头删 9、在pos位置插入x …

数据集【NO.7】无人机航拍数据集——VisDrone2019数据集

写在前面&#xff1a;数据集对应应用场景&#xff0c;不同的应用场景有不同的检测难点以及对应改进方法&#xff0c;本系列整理汇总领域内的数据集&#xff0c;方便大家下载数据集&#xff0c;若无法下载可关注后私信领取。关注免费领取整理好的数据集资料&#xff01;本文数据…

【前端知识】React 基础巩固(四十)——Navigate导航

React 基础巩固(四十)——Navigate导航 一、Navigate的基本使用 新建Login页面&#xff0c;在Login中引入Navigate&#xff0c;实现点击登陆按钮跳转至/home路径下&#xff1a; import React, { PureComponent } from "react"; import { Navigate } from "reac…

MySQL数据库之JDBC编程(从认识到操作)

目录 前言 一.JDBC的认识 1.1JDBC的来源 1.2JDBC的概念 二.JDBC的导包 三.JDBC的四步操作 三.JDBC常用的类和方法 3.1常用类 3.2常见方法 &#x1f381;个人主页&#xff1a;tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主 &#x1f3a5; 本文由 tq02 原创&…

芯片制造详解.光刻技术与基本流程.学习笔记(四)

本篇文章是看了以下视频后的笔记提炼&#xff0c;欢迎各位观看原视频&#xff0c;这里附上地址 芯片制造详解04&#xff1a;光刻技术与基本流程&#xff5c;国产之路不容易 芯片制造详解.光刻技术与基本流程.学习笔记 四 一、引子二、光刻(1).光掩膜(2).光刻机(3).光刻胶(4).挖…

matplotlib实现动态显示图片

plt.ion()打开交互开关 plt.ioff()关闭交互开关 plt.pause(0.1)暂停0.1秒 plt.clf()#清除当前的Figure图像 plt.cla()#清除当前的Axex图像 import matplotlib.pyplot as plt import numpy as np import time from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg…

计算机二级Python基本操作题-序号43

1. # 键盘输入一句话&#xff0c;用jieba分词后&#xff0c;将切分的词组按照在原话中逆序输出到屏幕上&#xff0c;词组中间没有空格。 示例如下&#xff1a; 输入&#xff1a; 我爱老师 输出&#xff1a; 老师爱我 import jieba txt input (请输入一段中文文本&#xff1a;)…

零拷贝原来这么简单!

我们总会在各种地方看到零拷贝&#xff0c;那零拷贝到底是个什么东西。 接下来&#xff0c;让我们来理一理啊。 拷贝说的是计算机里的 I/O 操作&#xff0c;也就是数据的读写操作。计算机可是一个复杂的家伙&#xff0c;包括软件和硬件两大部分&#xff0c;软件主要指操作系统…

【自动化测试】Jest体验之旅

目录 简介 快速体验 配置文件 Jest CLI 选项 --watchAll --watch 使用 ES6 模块 简介 Jest 是 Facebook 出品的一个 JavaScript 开源测试框架。相对其他测试框架&#xff0c;其一大特点就是就是内置了常用的测试工具&#xff0c;比如零配置、自带断言、测试覆盖率工具等…

从二叉搜索树到红黑树

二叉搜索树&#xff08;Binary Search Tree&#xff09; 特性 任意一个节点的所有左子树都比它小&#xff0c;所有右子树都比它大&#xff1b; 复杂度 当我们查找某个节点的时候&#xff0c;先从根节点开始比较&#xff0c;如果比根节点大走右子树&#xff0c;如果比根节点…

码农该如何延长周末体验感

码农该如何延长周末体验感 码农该如何延长周末体验感 码农该如何延长周末体验感1.制定合理的工作计划&#xff1a;2.实践工作与生活的平衡&#xff1a;3.学习新技术或扩展知识领域4.参与开源项目或个人项目&#xff1a;5.与同事或朋友组织活动&#xff1a;6.自己写博客或者总结…

jeecgboot新建moudle,但是访问404,需要在open moudle setting 里面设置

jeecgboot新建moudle&#xff0c;但是访问404&#xff0c;需要在open moudle setting 里面设置 首先需要确定以下3个pom.xml 最最外层的pom.xml 最最外层的pom.xml <modules><module>jeecg-boot-base-core</module><module>jeecg-module-demo</m…

string类(使用+实现)(C++)

string string类“登场”string类 - 了解string类的常用接口常见构造容量操作访问及遍历操作迭代器分类作用 增删查改操作非成员函数 string类的实现string类重要的方法实现分析介绍构造函数拷贝构造函数赋值运算符重载总结 string类整体实现代码 写时拷贝&#xff08;了解&…

金三银四好像消失了,IT行业何时复苏!

疫情时候不敢离职&#xff0c;以为熬过来疫情了&#xff0c;行情会好一些&#xff0c;可是疫情结束了&#xff0c;反而行情更差了&#xff0c; 这是要哪样 我心中不由一万个 草泥&#x1f434; 路过 我心中不惊有了很多疑惑和感叹&#xff01; 自我10连问 我的心情 自去年下…

什么是合者生情?

有人说&#xff0c;自己的命运自己掌握&#xff0c;但必须以预知自己命运如何为前提。 若不知道自己的命运如何&#xff0c;却要掌握自己的命运&#xff0c;那只是一句空话&#xff0c;是自欺欺人。 而易学在我国历史上&#xff0c;直至现在&#xff0c;都起到了重大而深远的作…