牛客网剑指Offer-树篇-JZ27 二叉树的镜像

news2024/11/7 18:00:38

题目

来源:JZ27 二叉树的镜像
描述
操作给定的二叉树,将其变换为源二叉树的镜像。
数据范围:二叉树的节点数 0≤n≤1000 , 二叉树每个节点的值 0≤val≤1000
要求: 空间复杂度 O(n) 。本题也有原地操作,即空间复杂度 O(1) 的解法,时间复杂度 O(n)

比如:
源二叉树
在这里插入图片描述

镜像二叉树
在这里插入图片描述

示例1
输入:
{8,6,10,5,7,9,11}
返回值:
{8,10,6,11,9,7,5}
说明:
如题面所示
示例2
输入:
{}
返回值:
{}

解析

基础:空间O(n)
很多解法包括官方题解都用辅助栈,其实可以不用:用先序/中序/后序遍历算法遍历原树,传入的参数变为两个:原树指针,和新树指针的引用(没有引用的语言需要用二级指针代替)。以先序遍历为例,算法如下:
1.判断原树节点是否空,空则返回。
2.根据原树节点的值创建新树节点。
3.递归遍历,右子树先遍历,传入新树节点的左指针,左子树后遍历,传入新树节点的右指针。
代码:

void PreOrderTrav(TreeNode* p, TreeNode*& p2) {
    if (!p) return;
    p2 = new TreeNode(p->val);
    PreOrderTrav(p->right, p2->left);
    PreOrderTrav(p->left, p2->right);
}
TreeNode* Mirror(TreeNode* pRoot) {
    TreeNode* root = NULL;
    PreOrderTrav(pRoot, root);
    return root;
}

进阶:空间O(1)
递归遍历原树,交换当前根节点的左右子树。先递归遍历左右子树,获得当前根节点的左右子树left,right,然后将当前根节点的左子树指针指向right,右子树指针指向left。

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

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

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

相关文章

Axure设置文本——元件动作三

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:设置文本 主要内容:掌握文本框的类型、属性、设置文本赋值的过程 应用场景:各种输入框、数据的重复赋值;多种小…

关于前端程序员使用Idea快捷键配置的说明

相信很多前端程序员 转到后端第一件事就是安装Idea然后学习java,在这里面最难的不是java的语法,而是关于快捷键的修改,前端程序员用的最多的估计就是VsCode或者Webstorm,就拿我自己举例我经常使用Vscode,当我写完代码下…

11-Dockerfile

11-Dockerfile Dockerfile Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。 构建步骤: 编写Dockerfile文件docker build命令构建镜像docker run依据镜像运行容器实例 构建过程 Dockerfile编写&#xff1a…

【零售和消费品&存货】食品分类检测系统源码&数据集全套:改进yolo11-RepNCSPELAN_CAA

改进yolo11-goldyolo等200全套创新点大全:食品分类检测系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.30 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片或者视…

入侵检测算法平台部署LiteAIServer视频智能分析平台行人入侵检测算法

在当今科技日新月异的时代,行人入侵检测技术作为安全防护的重要组成部分,正经历着前所未有的发展。入侵检测算法平台部署LiteAIServer作为这一领域的佼佼者,凭借其卓越的技术实力与广泛的应用价值,正逐步成为守护公共安全的新利器…

命令如诗,步入Linux的晨曦:指令初学者的旅程(下)

文章目录 前言🦚补充内容——管道管道的意义示例 🦚11. cat - 显示文件内容11.1 显示文件内容11.2 连接多个文件并显示内容11.3 显示行号11.4 合并文件11.5 显示非打印字符11.6 将标准输入输出到文件 🦚12. less - 分页查看文件内容12.1 基本…

【安全性分析】正式安全分析与非正式安全分析

安全性分析-系列文章目录 第一章 【安全性分析】正式安全分析与非正式安全分析 第二章 【安全性分析】BAN逻辑 (BAN Logic) 文章目录 安全性分析-系列文章目录前言一、正式安全分析1. 理想化模型(如随机预言机模型)2. 标准模型(Standard Model)3. 形式化验证4. 数学证明二…

kettle工具小经验

1、kettle本地连接数据库报错Error connecting to database: (using class oracle.jdbc.driver.OracleDriver) 原因:缺少jdbc jar包 处理:在data-integration\libswt\win64目录放一个jdbc jar包,我放的是ojdbc6.jar。 不知道为什么&#xff…

Android平台RTSP转RTMP推送之采集麦克风音频转发

技术背景 RTSP转RTMP推送,好多开发者第一想到的是采用ffmpeg命令行的形式,如果对ffmpeg比较熟,而且产品不要额外的定制和更高阶的要求,未尝不可,如果对产品稳定性、时延、断网重连等有更高的技术诉求,比较…

SSM旅游信息系统-计算机毕业设计源码00526

目 录 摘要 1 绪论 1.1 研究背景 1.2研究意义 1.3论文结构与章节安排 2 旅游信息系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4 系统流…

「Mac畅玩鸿蒙与硬件7」鸿蒙开发环境配置篇7 - 使用命令行工具和本地模拟器管理项目

本篇将讲解在 macOS 上配置 HarmonyOS 开发环境的流程,聚焦 hvigorw 命令行工具的使用。我们将以创建 HelloWorld 项目为例,演示使用 hvigorw 进行项目构建、清理操作,并通过 DevEco Studio 的本地模拟器进行预览,帮助提升项目开发…

央国企信创替代,2027年目标百分达成!信创人才评价成标配?

在2027年之前,央国企实现100%的信创替代,标志着中国信息技术应用创新产业发展步入关键阶段。 这一目标不仅体现了国家对于科技自主可控的高度重视,也预示着国内信创产业将迎来前所未有的发展机遇。 一、政策与市场背景 自2020年以来&#xff…

BOE(京东方)全新一代发光器件赋能iQOO 13 全面引领柔性显示行业性能新高度

10月30日,备受瞩目的iQOO最新旗舰机——被誉为“性能之光”的iQOO 13在深圳震撼发布。该款机型由BOE(京东方)独供6.82英寸超旗舰2K LTPO直屏,行业首发搭载全新一代Q10发光器件,在画面表现、护眼舒适度及性能功耗方面均达到行业领先水准,并以“直屏超窄边”的设计为用户呈现了前…

Python Requests 的高级使用技巧:应对复杂 HTTP 请求场景

介绍 网络爬虫(Web Crawler)是自动化的数据采集工具,用于从网络上提取所需的数据。然而,随着反爬虫技术的不断进步,很多网站增加了复杂的防护机制,使得数据采集变得更加困难。在这种情况下,Pyt…

【SAP Hana】X-DOC:数据仓库ETL如何抽取SAP中的CDS视图数据

【SAP Hana】X-DOC:数据仓库ETL如何抽取SAP中的CDS视图数据 1、无参CDS对应数据库视图2、有参CDS对应数据库表函数3、封装有参CDS为无参CDS,从而对应数据库视图 1、无参CDS对应数据库视图 select * from ZFCML_REP_V where mandt 300;2、有参CDS对应数…

提升网站速度与性能优化的有效策略与实践

内容概要 在数字化快速发展的今天,网站速度与性能优化显得尤为重要,它直接影响用户的浏览体验。用户在访问网站时,往往希望能够迅速获取信息,若加载时间过长,轻易可能导致他们转向其他更为流畅的网站。因此&#xff0…

C#界面设计--9--fatal error C1083: 无法打开包括文件:“jruparse.h”: No such file or directory

1、VS2008-编译时报错“fatal error C1083: 无法打开包括文件:“jruparse.h”: No such file or directory” 2、问题出现的原因及解决方法 1、如果要引入的这些,h文件跟.cpp在同一个目录下,就不会出现这种问题,检査在工程的include目录下是不是真的存…

‍️CentOS7.9 mall 部署【高可用版本】【本机部署】

文章目录 [TOC]技术选型后端技术前端技术移动端技术开发环境架构图业务架构图 项目部署实操主机规划中间件版本服务规划系统准备开始部署[[#MYSQL]]建立主从关系再次配置成为双主双从为 mysql 集群配置 vip [[#mongodb]]在主节点上无认证登录 [[#redis]]在主节点上查看集群状态…

【数据结构】-数组

数组 特点: 数组的地址连续,可以通过下标获取数据。 1. 数组扩容 步骤: $1. 创建一个比原来数组更长的新数组 $2. 让原来数组当中的数据依次复制到新数组当中 $3. 让arr指向新数组,原数组空间释放 2. 数组插入 2.1 最后位置…

Java 使用Maven Surefire插件批量运行单元测试

在基于Maven的Java项目中可以使用Maven 的 mvn test 命令来运行单元测试。 示例 有一个简单的Maven 项目&#xff0c; pom.xml 只导入了JUnit 5 的相关依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://m…