[LeetCode][426]【学习日记】将二叉搜索树转化为排序的双向链表——前驱节点pre 和 当前节点cur 的使用

题目

426. 将二叉搜索树转化为排序的双向链表

将一个 二叉搜索树 就地转化为一个 已排序的双向循环链表 。

对于双向循环列表,你可以将左右孩子指针作为双向循环链表的前驱和后继指针,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。

特别地,我们希望可以就地完成转换操作。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继。还需要返回链表中最小元素的指针。

  • 示例 1:
    在这里插入图片描述
    输入:root = [4,2,5,1,3] 输出:[1,2,3,4,5]
    解释:下图显示了转化后的二叉搜索树,实线表示后继关系,虚线表示前驱关系。
    在这里插入图片描述
  • 示例 2:

输入:root = [2,1,3] 输出:[1,2,3]

  • 示例 3:

输入:root = [] 输出:[] 解释:输入是空树,所以输出也是空链表。

  • 示例 4:

输入:root = [1] 输出:[1]
提示:

-1000 <= Node.val <= 1000 Node.left.val < Node.val < Node.right.val Node.val 的所有值都是独一无二的 0 <= Number of Nodes <= 2000

解法

解法来源:https://leetcode.cn/leetbook/read/illustration-of-algorithm/lxh893/


思考:

  1. 本题是二叉搜索树
  2. 对二叉搜索树,如果采用中序遍历,可得有序序列,因此考虑中序遍历
  3. 要形成双向链表,结合中序遍历为”左、根、右“的特点,设置 前驱节点pre 和 当前cur 指针会方便节点的指针修改,也就是 pre->right=cur、cur->left=pre
  4. 在遍历过程中,首先传入 cur->left,然后就对pre 和 cur的指向进行修改,修改完毕后更新pre,最后传入 cur->right
  5. 最终要形成循环链表,那么应该设置一个头节点head 指向第一个遍历到的节点(最小的节点);最后遍历到的节点就是最大的,也就是尾节点,更新完成后 pre 就是尾节点。此时更新头尾节点的指向使链表循环 head->left=pre pre->right=head

/*
// Definition for a Node.
class Node {
public:int val;Node* left;Node* right;Node() {}Node(int _val) {val = _val;left = NULL;right = NULL;}Node(int _val, Node* _left, Node* _right) {val = _val;left = _left;right = _right;}
};
*/class Solution {
public:Node *pre, *head;void dfs(Node* cur){if(!cur) return;dfs(cur->left);if(!pre) head=cur;else pre->right=cur;cur->left=pre;pre=cur;dfs(cur->right);}Node* treeToDoublyList(Node* root) {if(!root) return nullptr;dfs(root);head->left=pre;pre->right=head;return head;}
};

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

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

相关文章

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记07_价格歧视

1. 行为歧视 1.1. 单个企业通过使用数据驱动的算法&#xff0c;从而更好地实现锁定客户、开展个性化营销与定价的目的 1.2. 市场环境再次发生了变化 1.2.1. 在共谋场景中&#xff0c;定价算法提高了企业经营者在销量数据上的透明性&#xf…

【Java从入门到精通】Java异常处理

异常是程序中的一些错误&#xff0c;但并不是所有的错误都是异常&#xff0c;并且错误有时候是可以避免的。 比如说&#xff0c;你的代码少了一个分号&#xff0c;那么运行出来结果是提示是错误 java.lang.Error&#xff1b;如果你用System.out.println(11/0)&#xff0c;那么…

Java并发编程: AQS

文章目录 一、前置知识二、什么是AQS三、使用AQS框架的锁和同步器1、ReentrantLock2、ReentrantReadWriteLock3、CountDownLatch4、CyclicBarrier5、Semaphore&#xff1a;信号量 四、锁和同步器的关系1、锁&#xff1a;面向锁的使用者2、同步器&#xff1a;面向锁的实现者 五、…

四川易点慧电子商务有限公司抖音小店安全正规

在如今网络购物日益普及的时代&#xff0c;消费者对于购物平台的选择越来越挑剔。四川易点慧电子商务有限公司抖音小店以其安全正规的经营模式&#xff0c;赢得了广大消费者的信赖和好评。本文将为您详细介绍四川易点慧电子商务有限公司抖音小店的优势和特点&#xff0c;让您在…

Vue3全家桶 - Vue3 - 【2】声明响应式数据(ref + reactive + toRef + toRefs)

声明响应式数据 一、 组合式API 1.1 ref() ref() 函数&#xff0c;可以创建 任何数据类型 的 响应式数据&#xff1b;&#x1f53a;注意&#xff1a; 当值为 对象类型 时&#xff0c;会用 reactive() 自动转换它的 .value&#xff1b; ref 函数的内部实现依赖于 reactive 函…

【AI】如何创建自己的自定义ChatGPT

如何创建自己的自定义ChatGPT 目录 如何创建自己的自定义ChatGPT大型语言模型(LLM)GPT模型ChatGPTOpenAI APILlamaIndexLangChain参考推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课本文将记录如何使用OpenAI GPT-3.5模型、LlamaIndex和LangChain创建自己的…

java-ssm-基于jsp商场停车服务管理信息系统

java-ssm-基于jsp商场停车服务管理信息系统

Notes用户还可自助改密码

大家好&#xff0c;才是真的好。 很多时候企业对员工的安全使用进行了硬性规定&#xff0c;例如严格的就是&#xff0c;每三个月或六个月要至少更改一次密码。 在Domino 8.5以后&#xff0c;功能上多了一个新特性&#xff0c;叫ID保险库&#xff0c;其实就是把用户的id标识符…

day40 整数拆分 不同的二叉搜索树

题目1&#xff1a;343 整数拆分 题目链接&#xff1a;343 整数拆分 题意 将正整数n拆成k个正整数的和&#xff08;k>2&#xff09;使整数的乘积最大化 尽量拆成若干个数值近似相等的数&#xff0c;这使用的是数学里面的思想&#xff1a;ab<(a^2b^2)/2 (当且仅当ab时&…

http升级https需要做什么

背景&#xff1a;随着现代网络时代的高速发展&#xff0c;网络安全方面的日益更新&#xff0c;实现网站https协议的数量也在不断增多&#xff0c;完善安全方面的因素也在逐步增加。 下面从最基础的网站http协议全面升级为https协议的流程做出说明。 目录 首先带大家一起先了解…

Unity类银河恶魔城学习记录9-1 9-2 P89,90 Character stats - Stat script源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Stat.cs using System.Collections; using System.Collections.Generic; us…

javascript:void(0);用法及常见问题解析

javascript:void(0);用法及常见问题解析 1. 简介 javascript:void(0); 是一种 JavaScript 代码,常用于以下几种情况: 创建一个空链接,点击后不会发生任何跳转或动作。 在需要返回值的地方,返回 undefined 值。 避免意外的副作用,例如在箭头函数中,如果函数体不使用括号…

【C++】---string的OJ题

【C】---string的OJ题 1.字符串转整形数字&#xff08;重要&#xff09;&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;思路展示&#xff08;3&#xff09;代码实现 2.字符串相加&#xff08;重要&#xff09;&#xff08;1&#xff09;题目描述&#xff08;2&am…

如何保护企业云上安全

近日&#xff0c;CrowdStrike发布了《2024年全球威胁报告》&#xff0c;揭示了网络攻击的最新趋势。报告指出&#xff0c;网络攻击生态系统仍在持续增长&#xff0c;CrowdStrike在2023年观察到了34个新的威胁参与者。同时&#xff0c;攻击者正越来越多地瞄准云环境&#xff0c;…

Docker Desktop将镜像存储位置从C盘迁移到其它盘

一、简述 Docker Desktop默认安装在C盘,默认镜像存储位置在 C:\用户\Administrator\AppData\Local\Docker\wsl Docker Desktop 通过WSL2启动,会自动创建2个子系统,分别对应2个 vhdx 硬盘映像文件。 可以命令行执行wsl --list -v 看到 二、迁移步骤 1、在Docker Desktop…

css之常用样式

展示样式一&#xff1a; <div class"showListBox"><div class"List" v-for"(i,index) in sealList" :key"index"> <div class"ListItemCon"><div class"ListItem-titleBox"><img src…

阿里云ACK的应用服务如何暴露公网并挂载域名

背景介绍 针对部署到阿里云ACK集群的应用服务&#xff0c;实际业务场景可能需要我们暴露其中的服务到公网并要求通过域名访问改服务&#xff0c;那具体在阿里云平台上如何实现呢 配置步骤 新建ack集群是后续工作的第一前提由于篇幅有限就不在本文赘述&#xff0c;如下是基本…

Conmi遇到的坑——禅道的PCDN

好家伙&#xff0c;悄悄在后台吃了七十多G流量&#xff0c;我把你当兄弟宣传&#xff0c;你把我当PCDN吸。 还纳闷今天创建个VUE项目怎么提示D盘没空间&#xff0c;明明留了几十G&#xff0c;好家伙&#xff0c;一下子全吸干了。 删了两个&#xff0c;还有一个

6N137SDM光电耦合器中文资料规格书PDF数据手册引脚图图片价格参数芯片概述

产品概述&#xff1a; 6N137M、HCPL2601M、HCPL2611M 单沟道和 HCPL2630M、HCPL2631M 双沟道包含一个 850 nm AlGaAS LED&#xff0c;与带有可调谐输出的极高速集成式光电探测器逻辑门级进行光耦合。此输出具有一个开路集电极&#xff0c;允许有线 OR 输出。耦合参数在 -40C 至…

QT----计算器

目录 1 搭建标准界面2、 逻辑编写2.1 初始化 1 搭建标准界面 按照下图搭设界面 修改样式让这计算器看起来更像一点&#xff0c;同时对按钮分组进行样式编辑&#xff0c;添加字符串name,为number&#xff0c;其他按键为other。之前的文章里出现过好几次不在赘述 修改最大的样式…