快手一面:给定一棵二叉树,要求将其转换为其镜像?

目录标题

      • 题解:二叉树的镜像(Invert Binary Tree)
        • 问题描述
        • 示例
        • 解题思路
        • 代码实现
        • 详细分析
        • 复杂度分析
        • 优点
        • 注意事项💕

题解:二叉树的镜像(Invert Binary Tree)

问题描述

给定一棵二叉树,要求将其转换为其镜像。也就是说,交换每个节点的左子树和右子树。

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

示例

输入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9

输出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

在这里插入图片描述

解题思路

要将一棵二叉树转换为其镜像,可以通过递归的方法来实现。具体步骤如下:

  1. 基本情况:如果当前节点为空,则直接返回 null
  2. 交换左右子树:对于当前节点,交换其左子树和右子树。
  3. 递归处理子树:对新的左子树和右子树分别进行递归调用,继续交换它们的左右子树。
  4. 返回根节点:最终返回根节点,此时整棵树已经被转换为其镜像。
代码实现
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;
    }
}
详细分析
  1. 基本情况处理

    • 如果根节点 root 为空,说明当前子树为空,直接返回 null
  2. 交换左右子树

    • 使用一个临时变量 tmp 来保存当前节点的右子树。
    • 将当前节点的右子树设置为当前节点的左子树。
    • 将当前节点的左子树设置为临时变量 tmp 中保存的右子树。
  3. 递归处理子树

    • 对新的左子树调用 invertTree 方法,继续交换其左右子树。
    • 对新的右子树调用 invertTree 方法,继续交换其左右子树。
  4. 返回根节点

    • 最终返回根节点 root,此时整棵树已经被转换为其镜像。
复杂度分析
  • 时间复杂度

    • 每个节点都需要被访问一次,并且每次访问时需要进行常数时间的操作(交换左右子树)。
    • 因此,总的时间复杂度为 O(n),其中 n 是树中节点的数量。
  • 空间复杂度

    • 递归调用栈的空间复杂度取决于树的高度。
    • 在最坏情况下(树完全不平衡,退化成链表),空间复杂度为 O(n)。
    • 在最好情况下(树完全平衡),空间复杂度为 O(log n)。
优点
  • 简洁性:代码非常简洁,易于理解和实现。
  • 高效性:通过递归方法,可以有效地遍历并交换每个节点的左右子树。
注意事项💕
  • 空树处理:在开始递归之前,先检查根节点是否为空,以避免不必要的操作。
  • 递归终止条件:确保在递归过程中正确处理空子树的情况,防止出现空指针异常。
  • 交换当前节点的左右子树的代码位置是关键的
    • 为什么这段代码要写在这个位置?
    • 交换操作在递归调用之前,确保每次递归调用时,当前节点的左右子树已经被正确交换。这里是用到了前序遍历,从上到下,从根节点向下操作,所以用前序遍历!!

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch——介绍、安装与初步使用

目录 1.初识 Elasticsearch1.1.了解 ES1.1.1.Elasticsearch 的作用1.1.2.ELK技术栈1.1.3.Elasticsearch 和 Lucene1.1.4.为什么不是其他搜索技术?1.1.5.总结 1.2.倒排索引1.2.1.正向索引1.2.2.倒排索引1.2.3.正向和倒排 1.3.Elasticsearch 的一些概念1.3.1.文档和字…

MISC - 第二天(wireshark,base64解密图片,zip文件伪加密,LSB二进制最低位,ARCHPR工具)

前言 各位师傅大家好,我是qmx_07,今天给大家讲解杂项 乌镇峰会种图 使用了stegsolve工具,查看更多信息 发现flag信息 更改为html后缀flag{97314e7864a8f62627b26f3f998c37f1} wireshark 看题目是 分析pacp数据包,通过网站登录…

kubernetes K8S 结合 Istio 实现流量治理

目录 1.Istio介绍? 1.1 Istio是什么? 1.2 Istio流量管理 1.2.1 熔断 1.2.2 超时 1.2.3 重试 2.Istio架构 3.istio组件详解 3.1 Pilot 3.2 Envoy 3.3 Citadel 3.4 Galley 3.5 Ingressgateway 3.5 egressgateway 扩展、k8s1.23及1.23以下版…

每日算法2(翻转链表)

链接. - 力扣(LeetCode) 第一种 先来讲下最简单的算法,创建一个新链表,将原链表的元素挨个头插到新链表上,就实现了顺序表的逆转,这里就不示例代码了,在之前的链表有提及。 第二种 可以试试…

初写MySQL四张表:(4/4)

进度条很喜人,你是否已经修炼到这一步了呢? 初写MySQL四张表:(1/4)-CSDN博客 初写MySQL四张表:(2/4)_数据库表样例-CSDN博客 初写MySQL四张表:(3/4)-CSDN博客 若现在你已经有了前面的基础,那就正式开始吧。 四张表: 这次在实现…

JavaWeb美食推荐管理系统

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 spring-mybatis.xml3.5 spring-mvc.xml3.5 login.jsp 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优…

从理论到实践:解锁《数字化专业知识体系》助力企业数字化转型的落地之道

全面解码数字化转型——从理论构想到实践落地 在全球数字化浪潮的推动下,企业正面临前所未有的变革压力。虽然数字化转型的概念已经深入人心,但将其从战略蓝图转化为实际成果的过程仍充满挑战。《数字化专业知识体系》(《Towards a Digital …

鸿蒙操作系统(HarmonyOS)生态与机遇

HarmonyOS技术特点 鸿蒙操作系统(HarmonyOS)是华为公司开发的一款面向全场景的分布式操作系统。 架构特点: 分布式架构:这是鸿蒙系统的显著特点之一。它支持跨设备无缝协同体验,使不同设备能够快速连接、能力互助和资…

认知战认知作战:认知战目标对手分析,你需要知道的目标对手分析SOP

认知战认知作战:认知战目标对手分析,你需要知道的目标对手分析SOP 认知战认知作战:认知战目标对手分析你需要知道的目标对手分析SOP 关键词:认知战, 目标对手分析, 数据情报搜集, 自我审视, 洞悉对手, 精准攻击策略, 行动规划, …

基于等保浅谈服务器端和客户端的身份鉴别双向验证

等保云计算扩展要求 身份鉴别:当远程管理云计算平台中设备时,管理终端和云计算平台之间应建立双向身份验证机制。 单项认证和双向认证介绍 单向认证一般是指客户端确认服务端身份,而双向认证一般是指客户端和服务器端都需要验证对方的身份。双向认证的…

记录-java web 生成并下载zip文件

java生成zip文件,zip文件分两种:一种是包含文件夹、一种是不包含文件夹 生成zip文件的方式 ZipOutputStream zipOutputStream new ZipOutputStream(response.getOutputStream());// 文件夹名称String folder "download/";ZipEntry ze new Z…

怎样将latex文档转为word文档?

通常我们使用latex撰写论文,但有时也需要转为word文档方便其它人使用。转换过程中需要处理的内容包括3个部分:文字、图片、公式以及表格。 最简单的转换方式:latex编译成pdf文档,使用wps转换为word格式即可。这样转换的文档&…

你以为建站很复杂?Baklib 5分钟解决你的痛点

你以为建站很复杂?Baklib 5分钟解决你的痛点! 在这个“快节奏”的互联网时代,想要快速搭建一个网站是很多人的刚需。今天我要介绍的,就是如何利用Baklib的CMS/Wiki模板,五分钟内让你的网站“横空出世”。废话不多说&am…

双token无感刷新(vue3+node.js)

无感刷新的基本原理 使用刷新令牌(refresh token): ○ 应用程序在首次登录成功后会获得一个访问令牌(access token)和一个刷新令牌(refresh token)。 ○ 访问令牌通常有较短的有效期&#xff0…

音视频入门基础:AAC专题(9)——FFmpeg源码中计算AAC裸流每个packet的duration和duration_time的实现

音视频入门基础:AAC专题系列文章: 音视频入门基础:AAC专题(1)——AAC官方文档下载 音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件 音视频入门基础:AAC…

前端文件上传全过程

特别说明:ui框架使用的是蚂蚁的antd 这里主要是学习前端上传接口的传递参数包括前端上传之前对于代码的整理 一、第一步将前端页面画出来 源代码: /** 费用管理 - IT费用管理 - 费用数据上传 */ import { useState } from "react"; import {…

Snap 发布新一代 AR 眼镜,有什么特别之处?

Snap 发布新一代 AR 眼镜,有什么特别之处? Snap 简介 新一代的 AR 眼镜特点 Snap 简介 Snap 公司成立于 2010 年,2017 年美国东部时间 3 月 2 日上午 11 时许,在纽交所正式挂牌交易,股票代码为 “SNAP”。其旗下的核…

【视频讲解】非参数重采样bootstrap逻辑回归Logistic应用及模型差异Python实现

全文链接:https://tecdat.cn/?p37759 分析师:Anting Li 本文将深入探讨逻辑回归在心脏病预测中的应用与优化。通过对加州大学欧文分校提供的心脏病数据集进行分析,我们将揭示逻辑回归模型的原理、实现过程以及其在实际应用中的优势和不足…

YOLOv7项目运行

YOLOv7项目运行 文章目录 YOLOv7项目运行推理训练1.数据集制作2.创建yaml文件3.运行脚本训练 遇到的问题 代码:WongKinYiu/yolov7: Implementation of paper - YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors (githu…

机器学习——Bagging

Bagging: 方法:集成n个base learner模型,每个模型都对原始数据集进行有放回的随机采样获得随机数据集,然后并行训练。 回归问题:n个base模型进行预测,将得到的预测值取平均得到最终结果。 分类问题&#xf…