当前位置: 首页 > news >正文

学习记录:js算法(四十三):翻转二叉树

文章目录

    • 翻转二叉树
      • 我的思路
      • 网上思路
        • 递归
    • 总结

翻转二叉树

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

图一:
在这里插入图片描述

图二:
在这里插入图片描述

示例 1:(如图一)
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]示例 2:(如图二)
输入:root = [2,1,3]
输出:[2,3,1]示例 3:
输入:root = []
输出:[]

我的思路
循环
网上思路
递归、栈

我的思路

var invertTree = function (root) {if (!root) return null;const queue = [root];while (queue.length > 0) {const current = queue.shift();[current.left, current.right] = [current.right, current.left];if (current.left) queue.push(current.left);if (current.right) queue.push(current.right);}return root;
};

讲解

  1. 首先检查根节点是否为空,如果为空,直接返回 null
  2. 使用一个数组 nodes 来存储待处理的节点,初始化时将根节点放入数组。
  3. 使用 for 循环遍历数组中的节点:
    • 取出当前节点 current
    • 交换当前节点的左右子树。
    • 如果当前节点的左子节点不为空,将其加入数组;如果右子节点不为空,也加入数组。
  4. 当所有节点处理完毕后,返回翻转后的根节点。

网上思路

递归
var invertTree = function (root) {if (!root) return null; // 如果树为空,直接返回 null// 递归翻转左右子树const left = invertTree(root.left);const right = invertTree(root.right);// 交换左右子树root.left = right;root.right = left;return root; // 返回翻转后的根节点
}

讲解

  1. 基线条件:首先检查当前节点 root 是否为空。如果是,直接返回 null
  2. 递归调用:
    • 使用 invertTree(root.left) 递归翻转左子树,并将结果存储在 left 变量中。
    • 使用 invertTree(root.right) 递归翻转右子树,并将结果存储在 right 变量中。
  3. 交换左右子树:将当前节点的左子树设置为 right,右子树设置为 left
  4. 返回根节点:返回当前节点 root,以便在更高层的递归中继续处理。
var invertTree = function (root) {if (!root) return null; // 如果树为空,直接返回 nullconst stack = [root]; // 使用栈来存储节点while (stack.length > 0) {const current = stack.pop(); // 取出栈顶的节点// 交换当前节点的左右子树[current.left, current.right] = [current.right, current.left];// 将非空的左右子节点加入栈if (current.left) stack.push(current.left);if (current.right) stack.push(current.right);}return root; // 返回翻转后的根节点
}

详解

  1. 基线条件:首先检查根节点 root 是否为空。如果是,直接返回 null。
  2. 栈初始化:使用一个数组 stack 来模拟栈,初始化时将根节点放入栈。
  3. 循环处理:
    • 当栈不为空时,弹出栈顶节点 current
    • 交换当前节点的左右子树。
    • 如果当前节点的左子节点不为空,将其压入栈;如果右子节点不为空,也压入栈。
  4. 返回根节点:返回当前节点 root,即翻转后的树的根节点。

总结

解法挺多的,但是核心是一样的

相关文章:

学习记录:js算法(四十三):翻转二叉树

文章目录 翻转二叉树我的思路网上思路递归栈 总结 翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点 图一: 图二: 示例 1:(如图一) 输入:root [4,2,7,1…...

关于 SQL 的 JOIN 操作

关于 SQL 的 JOIN 操作 在关系型数据库中,数据通常分布在多个表中。为了进行有效的数据检索,我们需要从不同的表中组合数据,这时就需要使用 JOIN 操作。本文将深入探讨 SQL 中不同类型的 JOIN 及其用法,以帮助你在数据库查询中更…...

聊聊AUTOSAR:基于Vector MICROSAR的TC8测试开发方案

技术背景 车载以太网技术作为汽车智能化和网联化的重要组成部分,正逐步成为现代汽车网络架构的核心,已广泛应用于汽车诊断(如OBD)、ECU软件更新、智能座舱系统、高清摄像头环视泊车系统等多个领域。 在这个过程中,ET…...

ES6中迭代器与生成器知识浅析

ES5及以下版本对JS几种集合,要存取数据一般需要用循环语句来遍历,就要初始化一个或多个变量来记录每一次循环在数据集合中的位置或数据值。这里容易出现超出边界问题,造成程序出错。另外,对于多次循环也需要跟踪理清各个变量关系及…...

unix中的vfork函数

一、前言 本文介绍unix中的vfork函数,vfork函数功能和fork函数类似,也是用于创建新的进程,只不过调用vfork函数创建的子进程将共享父进程的进程空间,且只有当子进程调用exec()或者exit()函数后,父进程才会继续运行。 …...

Android 用线程池实现一个简单的任务队列(Kotlin)

关于线程池,Kotlin和java的使用方式一样 在Android中,很多人喜欢用Handler的postDelayed() 去实现延时任务. 要使用postDelayed(),去实现延时任务队列,就不可避免要使用递归. 但是这样做,代码的简洁性,和书写的简易,就远不如使用线程池. 使用线程池的简单程度: private val…...

遨游信息技术的浩瀚宇宙:探索MySQL的深邃奥秘

遨游信息技术的浩瀚宇宙:探索MySQL的深邃奥秘 在信息技术的浩瀚宇宙中,MySQL犹如一颗璀璨的星辰,以其稳定、高效、灵活的特性,照亮了无数开发者与数据管理者的前行之路。作为关系型数据库管理系统的佼佼者,MySQL不仅承…...

【Bug解决】Nacos启动成功,但却无法访问(提示:无法访问此网站,192.168.10.88的响应时间过长)

项目场景: 在虚拟机上通过Docker创建Nacos容器,已经创建成功,查看Nacos启动日志也是成功。但通过端口号加8848/nacos(如:http://IP:8848/nacos)无法访问到Nacos管理页面。 愿意分析一: 先检查好…...

【AI创作组】工程方向的硕士研究生学习Matlab的路径

1. MATLAB软件概述 1.1 MATLAB发展历程 MATLAB自20世纪70年代诞生以来,已经经历了多次重要的版本更新和功能扩展。 初始版本:MATLAB的前身只是一个简单的交互式矩阵计算器,由Cleve B. Moler博士在1970年代初期开发,目的是为了方便学生和研究人员使用线性代数软件包LINPAC…...

Mac使用Nginx设置代理,并禁用自带Apache

Mac自带Apache服务,并占用80端口,如果需要使用Nginx,需要禁用Apache并自己安装Nginx 一、禁用自带Apache 1.关闭Apache sudo apachectl -k stop 如果出现如下报错:httpd: Could not reliably determine the server’s fully q…...

AlmaLinux 安裝JDK8

在 AlmaLinux 上安装 JDK 8 可以通过包管理器 dnf 来完成。AlmaLinux 是基于 RHEL 的一个开源发行版,因此其包管理系统和 RHEL 类似。以下是详细的步骤来安装 OpenJDK 8 1. 更新系统包列表 sudo dnf update -y 2. 安装 OpenJDK 8 使用 dnf 安装 OpenJDK 8。你可…...

Set 和 Map 的模拟实现

1、引言 在数据结构与算法的学习与实践中,关联容器(associative containers)是不可忽视的重要工具。作为高效管理数据的一类容器,C 标准库中的 set 和 map 在现代软件开发中扮演着关键角色。这两个容器通过平衡二叉搜索树&#x…...

深度学习自编码器 - 预测稀疏分解(PSD)篇

序言 在数据科学与机器学习的广阔领域中,深度学习作为一股不可忽视的力量,正引领着技术革新的浪潮。其中,自编码器( Autoencoder \text{Autoencoder} Autoencoder)作为一种特殊的神经网络结构,以其独特的自…...

如何检测出来这个ip是共享ip不安全

检测一个IP是否为共享IP以及其安全性可以通过以下几种方法和工具来进行分析。共享IP通常是指多个用户共享一个IP地址,常见于公共代理服务器、VPN服务或数据中心IP。如果你想评估一个IP是否为共享IP以及其安全性,以下方法和工具可以帮助你进行检测和分析。…...

TMStarget学习——T1 Segmentation数据处理及解bug

最新学习季公俊老师的神器 TMStarget 的第一个模块基于结构像的靶区计算T1 segmentation。下面上步骤: (1)在github 上下载 TMStarget https://github.com/jigongjun/Neuroimaging-and-Neuromodulation (2)按照要求下载依赖工具软件AFQ、vistasoft、SPM12 &#…...

锁策略, cas 和 synchronized 优化过程

1.1 常見的鎖策略 預測鎖衝突概率 樂觀鎖:加鎖的時候,假設出現鎖衝突的概率不大。圍繞加鎖做的工作會更少。 悲觀鎖:加鎖的時候,假設鎖出現衝突的概率很大。圍繞加鎖做的工作會更多。 synchronized “自適應” 初始是樂觀的。鎖…...

【HTML5】html5开篇基础(2)

1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…...

大数据新视界 --大数据大厂之 Reactjs 在大数据应用开发中的优势与实践

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

【论文阅读笔记】TOOD: Task-aligned One-stage Object Detection

论文代码:https://github.com/fcjian/TOOD 文章目录 论文小结论文简介论文方法Task-aligned Head(T-Head)T-Head伪代码解释 Task Alignment Learning(TAL)Task-aligned Sample AssignmentTask-aligned Loss 论文实验消…...

类中的特殊内容

仿照string类&#xff0c;自己手动实现 My_string #include <iostream> #include <string.h> using namespace std;class My_string { private:int len;int size;char *ptr; public:My_string():size(15),len(0){ptrnew char[size];ptr[0]\0;}My_string(const char…...

避坑指南:在Simplicity Studio 5中为BLE工程添加串口控制与软定时器时,我踩过的那些雷

Simplicity Studio 5 BLE开发实战&#xff1a;串口控制与软定时器的七个关键陷阱与解决方案 当你在Simplicity Studio 5中完成基础BLE工程搭建后&#xff0c;真正挑战才刚刚开始。我曾在一个智能照明项目中&#xff0c;需要同时处理BLE连接、串口指令控制和LED定时闪烁功能&…...

AI时代测试人员如何转型

某老板&#xff1a;开发已经用AI提升了数倍的效率与产出&#xff0c;那测试呢&#xff1f;如果测试在AI时代掉队了&#xff0c;那是不是不需要测试了&#xff1f;某测试人员&#xff1a;我折腾了大半个月的AI&#xff0c;AI根本没办法给测试人员提效&#xff0c;它就像个弱智一…...

深度学习编译器优化:CNN与MHA块的性能差异与实践指南

1. 深度学习编译器优化概述在深度学习模型部署的实际场景中&#xff0c;我们常常面临一个关键矛盾&#xff1a;训练框架&#xff08;如PyTorch&#xff09;的动态图特性虽然灵活&#xff0c;但在推理时会产生显著的性能开销。这正是深度学习编译器技术大显身手的领域——通过静…...

PotPlayer百度翻译插件终极指南:免费实现20+语言实时字幕翻译

PotPlayer百度翻译插件终极指南&#xff1a;免费实现20语言实时字幕翻译 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu PotPlayer字幕…...

程序员AI大模型转型:从入门到精通,轻松掌握大模型开发,高薪职位等你来拿!

在人工智能&#xff08;AI&#xff09;迅速发展的背景下&#xff0c;从传统的编程领域如Java程序员转向大模型开发是一个既充满挑战也充满机遇的过程。对于 Java 程序员来说&#xff0c;这也是一个实现职业转型、提升薪资待遇的绝佳机遇。 一、明确大模型概念 简单来说&#xf…...

FanControl风扇控制软件:5分钟快速上手指南,轻松解决电脑噪音与散热难题

FanControl风扇控制软件&#xff1a;5分钟快速上手指南&#xff0c;轻松解决电脑噪音与散热难题 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gi…...

LAMMPS GPU加速踩坑实录:CUDA driver error 4报错,原来问题出在CPU核数上

LAMMPS GPU加速实战&#xff1a;从CUDA driver error 4报错到性能调优全解析 当你在深夜的实验室里盯着终端不断刷新的红色报错信息&#xff0c;那种挫败感我深有体会。作为一名长期使用LAMMPS进行分子动力学模拟的研究者&#xff0c;我清楚地记得第一次遇到"CUDA driver …...

芯片Signoff中的不确定性风险管理:工艺角、蒙特卡洛与签核验证

1. 项目概述&#xff1a;芯片Signoff中的不确定性风险管理在芯片设计的最后阶段&#xff0c;也就是我们常说的Signoff&#xff08;签核&#xff09;&#xff0c;工程师们面临的最大挑战之一&#xff0c;就是如何与无处不在的“不确定性”共舞。这里的“不确定性”&#xff0c;专…...

保姆级教程:用YOLOv5+DeepSort从零搭建一个车辆计数测速系统(附完整源码和数据集)

从零构建智能交通分析系统&#xff1a;YOLOv5与DeepSort实战指南 在智能交通管理领域&#xff0c;计算机视觉技术正发挥着越来越重要的作用。本文将带您一步步搭建一个完整的车辆计数与测速系统&#xff0c;结合YOLOv5目标检测和DeepSort多目标跟踪算法&#xff0c;实现从视频流…...

OpenClaw用户如何通过CLI子命令快速完成Taotoken接入配置

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 OpenClaw用户如何通过CLI子命令快速完成Taotoken接入配置 对于使用OpenClaw进行AI智能体开发的开发者而言&#xff0c;快速接入稳定…...