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

从零学算法(剑指 Offer 36)

123.输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
为了让您更好地理解问题,以下面的二叉搜索树为例:请添加图片描述
我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。
下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。
特别地,我们希望可以就地完成转换操作。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继。还需要返回链表中的第一个节点的指针。

  • 他人题解:首先中序遍历模板如下
  •   dfs(Node cur){if(cur==null)return;dfs(cur.left);  //前solve cur...	//中dfs(cur.right); //后}
    
  • 首先为了构建双向连接,我们肯定要定义当前遍历节点的前一个节点 pre。由于最后要返回链表头结点,所以定义一个头结点 head。我们在 dfs 的当前节点处理部分,根据题意很容易想到,无非就是连接前后(当前节点与左节点,或当前节点和右结点)两个节点,然后更新 pre 为当前节点,也就是 cur.left=pre, pre.right=cur, cur=pre。但是在递归时第一次处理当前节点时,也就是头节点时,是没有 pre 给他连接的(按道理应该连接尾结点,可这时刚开始操作,还没拿到尾结点),所以就特判一下,如果 pre 为 null 说明此时在处理的是头结点,就不让 pre 连接它了,而是让 head = cur,这也正好,我们最后要返回的 head 在这一步就得到了。dfs 结束后,pre 此时是指向尾结点的,这时就可以完成之前没连接的,让 head.left = pre(此时为尾结点),然后 pre.right=head。
  •   Node pre, head;public Node treeToDoublyList(Node root) {if(root == null) return null;dfs(root);head.left = pre;pre.right = head;return head;}void dfs(Node cur) {if(cur == null) return;dfs(cur.left);// 有 pre 就连,否则说明为头节点if(pre != null) pre.right = cur;else head = cur;// cur 为头节点时先连个 null 也无所谓,反正 dfs 结束后会连正确的尾结点// 在其他情况下就能正确连接当前节点和他的前一个节点了cur.left = pre;pre = cur;dfs(cur.right);}
    

相关文章:

从零学算法(剑指 Offer 36)

123.输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 为了让您更好地理解问题,以下面的二叉搜索树为例: 我们希望将这个二叉搜索树转化为双向循环链表。…...

【Unity3D】UI Toolkit容器

1 前言 UI Toolkit简介 中介绍了 UI Builder、样式属性、UQuery,本文将介绍 UI Toolkit 中的容器,主要包含 VisualElement、ScrollView、ListView、UI Toolkit,官方介绍详见→UXML elements reference。 2 VisualElement(空容器&…...

手把手教你写出第一个C语言程序

Hello, World! 1. 前言2. 准备知识2.1 环境2.2 文件的分类2.3 注释2.3.1 注释的作用2.3.2 注释的两种风格2.3.2.1 C语言的注释风格2.3.2.2 C的注释风格 2.3.3 VS中注释和取消注释的快捷键 3. 开始演示3.1 创建项目3.2 创建源文件3.3 写代码3.4 编译链接运行 4. 代码解释4.1 写主…...

flink维度表关联

分析&回答 根据我们业务对维表数据关联的时效性要求,有以下几种解决方案: 1、实时查询维表 实时查询维表是指用户在Flink 的Map算子中直接访问外部数据库,比如用 MySQL 来进行关联,这种方式是同步方式,数据保证是…...

Docker Compose 安装使用 教程

Docker Compose 1.1 简介 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的 快速编排 。从功能上看,跟 OpenStack 中的 Heat 十分类似。 其代码目前在 https://github.com/docker/compose 上开源。 Compose 定位是 「定义和运行多个…...

睿趣科技:开抖音小店挣钱吗到底

在当今数字化时代,社交媒体平台成为了创业者们寻找商机和赚钱的新途径。而抖音作为一款风靡全球的短视频分享平台,自然也成为了许多人开设小店、进行创业的选择之一。那么,开抖音小店能否真正实现盈利,成为了一个备受关注的话题。…...

国际腾讯云账号云服务器网络访问丢包问题解决办法!!

本文主要介绍可能引起云服务器网络访问丢包问题的主要原因,及对应排查、解决方法。下面一起了解腾讯云国际云服务器网络访问丢包问题解决办法: 可能原因 引起云服务器网络访问丢包问题的可能原因如下: 1.触发限速导致 TCP 丢包 2.触发限速导致…...

Deepnote:为什么我停止使用 Jupyter Notebook

Jupyter 笔记本已经成为必不可少多年来用于众多数据科学工作流程的工具。其中包括执行数据挖掘、分析、处理、建模以及在每个数据科学项目的生命周期中执行的一般日常实验任务。 Jupyter(作者提供的图片) 尽管它很受欢迎,但许多数据科学家也指出了它的众多缺点,例如这里和...

山西省文物局与大势智慧签订战略合作协议

8月24日,由山西省文物局、中国文物信息咨询中心(国家文物局数据中心)主办的数字文博发展论坛在太原举行。武汉大势智慧科技有限公司(后简称“大势智慧”)受邀参与,与来自国内文博数字化领域的专家学者齐聚一堂,围绕“数…...

Java设计模式:一、六大设计原则-02:开闭原则

文章目录 一、定义:开闭原则二、模拟场景:开闭原则2.0 工程结构2.1 定义面积计算接口2.2 面积计算实现类 三、违背方案:开闭原则四、改善代码:开闭原则4.1 扩展继承4.2 单元测试 一、定义:开闭原则 开闭原则&#xff…...

DETRs Beat YOLOs on Real-time Object Detection

目录 1、模型架构1.1高效混合编码器1.1.1 尺度内特征交互模块AIFI1.1.2 跨尺度特征融合CCFM 1.2IoU感知查询选择总结 DETRs在实时目标检测中击败YOLO 问题:DETR的高计算成本,实时检测效果有待提高 解决:提出了一个实时的目标检测器 具体来说…...

【数据分享】1901-2022年1km分辨率的逐月降水栅格数据(免费获取/全国/分省)

气象指标在日常研究中非常常用,之前我们给大家分享过来源于国家青藏高原科学数据中心提供的气象指标栅格数据(均可查看之前的文章获悉详情): 1901-2022年1km分辨率逐月平均气温栅格数据1901-2022年1km分辨率逐年平均气温栅格数据…...

全网首发!奔驰宝马奥迪卡带机卡带通道激活模块,无损安装可以接2路AUX

文章目录 1.前言2.时序逆向分析2.1协议分析2.2卡带音频通道引出 3、PCB设计4、程序设计5、焊接调试6、结语 1.前言 ​ 之前写过四篇关于车机增加音频输入的方法。 1、07宝来经典车机CD收音机(RC668)改装增加蓝牙播放音乐 2、全网首发!老大…...

反弹shell总结

反弹shell总结 讲在前面说的话:反弹shell总结nc反弹shell正向shell反向shell正向shell(服务端被攻击):反向shell(客户端被攻击):无nc反弹shellpython反弹shellbash反弹shellPHP反向shellPerl反向shellJava反弹shellsocat 反弹shellRuby反弹shellLua反弹shellAwk 反弹she…...

[机缘参悟-103] :IT人关于接纳的思考与感悟

目录 前言: 一、接纳 1.1 什么是接纳 1.2 对接纳的误解 1.3 接纳的含义 1.4 "存在即合理" VS 接纳 1.5 接纳 VS 躺平 VS 随遇而安 1.6 为什么现实总是那么不尽人意 1.7 现实世界的多样性 1.8 接纳与认命 1.9 不接纳的表现 前言: …...

甄知携AIGC新升级产品参与首届人工智能生成内容国际会议,共探AIGC最前沿技术

首届人工智能生成内容国际会议(2023The 1st International Conference on AI-generated Content (AIGC2023)于2023年8月25-26日在中国上海举行。本次会议得到了复旦大学、中国科技大学、同济大学、上海交通大学、上海人工智能实验室、香港中文大学等知名院校和研究机构的大力支…...

4.9 已建立连接的TCP,收到SYN会发生什么?

1. 客户端的 SYN 报文里的端口号与历史连接不相同 此时服务端会认为是新的连接要建立,于是就会通过三次握手来建立新的连接。 旧连接里处于 Established 状态的服务端最后会怎么样呢? 服务端给客户端发消息了:客户端连接已被关闭&#xff…...

leetcode 365 水壶问题

有一个水壶容量或者两个水壶加起来总容量为目标容量 总共有八种选择:第一种倒满x,第二种倒满y,第三种清空x,第四种清空y,第五种x 倒给 y y能装满 ,第六种 x 倒给 y x倒完, 。。。。 这里用深度遍历,时间超时 class Solution {public boole…...

django/CVE-2017-12794XSS漏洞复现

docker搭建漏洞复现环境 漏洞原理看帮助文档 # Django debug page XSS漏洞(CVE-2017-12794)分析Django发布了新版本1.11.5,修复了500页面中可能存在的一个XSS漏洞,这篇文章说明一下该漏洞的原理和复现,和我的一点点评…...

【学习笔记】计算机视觉对比学习综述

计算机视觉对比学习综述 前言百花齐放InstDiscInvaSpreadCPCCMC CV双雄MoCoSimCLRMoCo v2SimCLR v2SwAV 不用负样本BYOLSimSiam TransformerMoCo v3DINO 总结参考链接 前言 本篇对比学习综述内容来自于沐神对比学习串讲视频以及其中所提到的论文和博客,对应的链接详…...

3分钟掌握CPU-X:Linux系统硬件信息检测的完整指南

3分钟掌握CPU-X:Linux系统硬件信息检测的完整指南 【免费下载链接】CPU-X CPU-X is a Free software that gathers information on CPU, motherboard and more 项目地址: https://gitcode.com/gh_mirrors/cp/CPU-X 你是否曾经想知道自己的Linux电脑到底用了什…...

PS左边工具栏不见了?最全恢复解决教程

在使用Photoshop进行修图、设计操作时,左侧工具栏作为核心功能面板,承载着选区、绘画、修图等常用工具,一旦莫名消失,会直接中断操作、影响效率。很多新手遇到这种情况会手足无措,其实无需慌张,今天就给大家…...

软考系统架构设计师实战论文集:自动驾驶与AI云端架构演进

【引言】 自动驾驶的下半场,早已不再局限于单车智能的角逐,而是演变成了一场关乎云端算力、海量数据治理与大模型工程化的全面战役。当接入的车辆规模突破百万级,当每日回传的工况数据达到 PB 级,云端数据平台的可靠性、扩展性与…...

Nodejs开发者三步接入Taotoken,实现异步聊天补全

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Nodejs开发者三步接入Taotoken,实现异步聊天补全 对于使用Node.js进行开发的工程师来说,无论是构建前端应用…...

OpenClaw 3 机集群(Windows + Linux 混合)一键脚本 + 完整配置

集群架构规划(1 主 2 从)统一安装脚本(Windows PowerShell / Linux bash)主节点配置(gateway 调度)从节点配置(worker 注册到主)集群通信、端口、令牌、存储一键启停、扩容、状态检…...

站长日记:实测一款神仙工具,终于搞定了Bing和360的收录难题

最近真的很想吐槽一句:现在做个小站怎么就这么难? 事情是这样的,上个月为了测试一个新出的长尾词,我花周末两天火速搭了个新站,内容全部手写,绝对原创。按照以前的经验,这种质量的站&#xff0c…...

使用Taotoken CLI工具一键为团队所有网站项目配置统一API接入点

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken CLI工具一键为团队所有网站项目配置统一API接入点 在团队协作开发中,确保所有成员使用统一的大模型API接…...

别再重复造轮子!用PADS自带转换器+立创EDA,5分钟搞定原理图符号同步

高效复用立创EDA资源:PADS原理图符号同步实战指南 在硬件设计领域,重复绘制原理图符号堪称工程师的"时间黑洞"。当你在立创EDA上发现完美的元器件模型时,为何还要在PADS中从零开始?本文将揭示一套被多数人忽视的PADS原生…...

LuaJIT字节码逆向难题:LJD如何帮你恢复可读源码

LuaJIT字节码逆向难题:LJD如何帮你恢复可读源码 【免费下载链接】luajit-decompiler https://gitlab.com/znixian/luajit-decompiler 项目地址: https://gitcode.com/gh_mirrors/lu/luajit-decompiler 面对编译后的LuaJIT字节码文件,你是否曾困惑…...

西方垃圾思维在中国 AI 大模型中的渗透机制与贾子理论替代范式研究

西方垃圾思维在中国 AI 大模型中的渗透机制与贾子理论替代范式研究摘要: 西方垃圾思维(WCG)正通过“伪自主”模式深度渗透中国主流AI大模型。百度文心、讯飞星火等模型表面宣称“自主研发”“遵循社会主义核心价值观”,实则借助标…...