​面试经典150题——翻转二叉树

devtools/2024/11/15 4:46:01/

1. 题目描述

2.  题目分析与解析

分析题目可以看出,其实就是从下到上的左右节点互换操作,其实上也是可以进行递归操作的,这是因为每一个子操作和父操作都是一样的方式。

解题思路

  1. 空树情况处理: 首先检查根节点是否为空。如果根节点为空,则直接返回 null,因为空树的翻转也是空树。

  2. 递归交换左右子树: 如果根节点不为空,则递归地对左右子树进行翻转。这里的递归调用是算法的核心部分。在每次递归调用中,我们交换当前节点的左右子树。这里用一个临时变量 temp 保留右子树,以免交换后丢失右子树。

  3. 返回根节点: 递归的终止条件是当前节点为空,也就是叶子节点的左右子树为空。当递归到叶子节点时,开始回溯,将叶子节点返回,并逐层向上返回翻转后的子树。

整体来说,这个算法的思路是从根节点开始,递归地对整棵树进行翻转。对于每个节点,将其左右子树交换后,再递归地翻转其左右子树。通过递归的方式,直到所有节点都被处理完毕,最终返回翻转后的根节点。

这个算法是一种典型的深度优先搜索(DFS)的应用,利用递归实现了对树的遍历和操作。

3. 代码实现

4. 相关复杂度分析

  1. 时间复杂度:

    • 递归函数在每个节点上执行恰好一次,因此总的时间复杂度是 O(n),其中 n 是树中节点的数量。这是因为算法会遍历每个节点,并且在每个节点上执行恰好一次的交换操作。

  2. 空间复杂度:

    • 空间复杂度取决于递归调用的栈空间。在最坏情况下,递归调用的最大深度等于树的高度。因此,空间复杂度为 O(h),其中 h 是树的高度。

    • 如果树是平衡二叉树,树的高度近似为 log(n),其中 n 是树中节点的数量,因此空间复杂度为 O(log(n))。

    • 如果树是不平衡的,最坏情况下树的高度等于节点数量 n,空间复杂度为 O(n)。

综上所述,该算法的时间复杂度为 O(n),空间复杂度取决于树的高度,在最坏情况下为 O(n),在平衡树的情况下为 O(log(n))。


http://www.ppmy.cn/devtools/6583.html

相关文章

聊聊linux的文件缓存

序 本文主要研究一下linux的文件缓存 文件缓存 linux使用page cache来缓存最近读取的文件,也有目录结构(dcache: Directory Entry Cache)缓存及inode缓存,它们都使用了LRU算法来管理这些page及dentries cache vmstat ## vmstat procs -----------me…

【数据结构2-线性表】

数据结构2-线性表 1 线性表-数组2 线性表-单链式结构2.1 前插顺序单链表2.2 后插顺序单链表2.3 循环单链表2.4 双向链表 总结 线性表、栈、队列、串和数组都属于线性结构。 线性结构的基本特点是除第一个元素无直接前驱,最后一个元素无直接后继之外,其他…

【C++】日期类Date(详解)

🔥个人主页:Forcible Bug Maker 🔥专栏:C 目录 前言 日期类 日期类实现地图 获取某年某月的天数:GetMonthDay 检查日期合法,构造函数,拷贝构造函数,赋值运算符重载及析构函数…

【运维】docker-compose部署redis

部署Redis使用docker-compose是一种简便且流行的方式。以下是基本的docker-compose.yml文件示例,用于部署单节点Redis服务 方案一 直接使用docker安装单机版 创建.env环境文件并配置管理密码 echo REDIS_PWDredis123456 > .env创建docker-compose.yml环境文件…

【C语言】每日一题,快速提升(8)!

🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 题目:金字塔图案 输入: 4输出: * * * * * * * * * * 代码: //对于有行有列的图形采用双循环,i控制行…

算法课程笔记——集合set

3复杂度不稳定 删一个和删除全部 注意iter是类 遍历是无序的

保护视力,从 CareUEyes 开始 —— 你的电脑护眼小助手

在数字化时代,我们的眼睛比以往任何时候都更频繁地面对屏幕。长时间盯着电脑工作,不仅影响视力,还可能导致眼疲劳和不适。今天,我要向大家推荐一款专为电脑用户设计的护眼软件——CareUEyes。 CareUEyes:你的视力守护者…

【Linux开发 第六篇】Linux常用命令知识

常用命令知识 关机和重启用户管理用户组运行级别帮助指令文件目录类时间日期类搜索查找类压缩和解压类 关机和重启 shutdown -h now //立刻进行关机 shutdown -h 1 “1分钟后进行” //一分钟后进行关机 并向登录Linux的各个用户发送字符串 shutdown -r now //现在重新启动…