Leetcode-每日一题【剑指 Offer 36. 二叉搜索树与双向链表】

news2024/9/24 19:13:24

题目

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。

为了让您更好地理解问题,以下面的二叉搜索树为例:

我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。

下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。

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

解题思路

1.题目要求将二叉搜索树转换成一个排序的循环双向链表,既然他需要排序,那么我们就对二叉搜索树进行中序遍历,这样我们就可以得到有顺序的序列。

2.我们新建一个队列 queue ,然后对二叉搜索树进行中序遍历,并且将遍历的结果入队。

3.遍历结束后我们就得到了一个有序队列,这时我们只需要使用 whie 循环让队列中的元素出队并且将元素做一下连接,让前一个元素的right指针指向后一个元素,让后一个元素的left指针指向前一个元素。最后不要忘记首位元素的连接。

代码实现

class Solution {
    public Node treeToDoublyList(Node root) {
        if(root == null){
            return null;
        }
        Queue<Node> queue = new LinkedList<>();
        inOrder(root, queue);
        Node head = queue.poll();
        Node pre = head;
        while(!queue.isEmpty()){
            Node cur = queue.poll();
            pre.right = cur;
            cur.left = pre;
            pre = cur;
        }
        pre.right = head;
        head.left = pre;
        return head;
        
    }
    void inOrder(Node root, Queue<Node> queue){
        if(root == null){
            return;
        }
        inOrder(root.left, queue);
        queue.add(root);
        inOrder(root.right, queue);
    }
}

测试结果

 

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

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

相关文章

(mybatis与spring集合

mybatis与spring集合 一、Spring集成MyBatis1.1. pom依赖1.2. 配置文件1.3. Spring整合MyBatis1.3.1. 配置自动扫描JavaBean1.3.2. 配置数据源1.3.3. 配置session工厂1.3.4. 配置mapper扫描接口1.3.5. 配置事务管理器1.3.6. 配置AOP自动代理1.4. 测试 二、Spring集成PageHelper…

Nodejs+vue+elementui幼儿园管理系统5umt6

本课题主要研究如何用信息化技术改善传统幼儿园行业的经营和管理模式&#xff0c;简化幼儿园管理的难度&#xff0c;根据幼儿园管理实际业务需求&#xff0c;调研、分析和编写系统需求文档&#xff0c;设计编写符合企业需要的系统说明书&#xff0c;绘制数据库结构模型&#xf…

AI驱动的大数据创新:探索软件开发中的机会和挑战

文章目录 机会数据驱动的决策自动化和效率提升智能预测和优化个性化体验 挑战数据隐私与安全技术复杂性数据质量和清洗伦理和社会问题 案例&#xff1a;智能代码生成工具总结 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &…

SpringBoot使用@Scheduled实现定时任务

前言 Spring3.0版本之后就自带定时任务&#xff0c;提供了EnableScheduling和Scheduled这两个注解来实现定时任务的功能。 创建定时任务也变得尤为简单。 创建过程 步骤一&#xff1a;在SpringBoot的启动类上加上EnableScheduling注解&#xff0c;开启定时任务管理。 步骤二…

2023-08-26 LeetCode每日一题(汇总区间)

2023-08-26每日一题 一、题目编号 228. 汇总区间二、题目链接 点击跳转到题目位置 三、题目描述 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖…

五、多表查询-4.外连接

一、语法 二、演示-左外连接 【例】查询emp1表的所有数据&#xff08;17条&#xff09;&#xff0c;和对应的部门信息&#xff08;左外连接&#xff09; 【 左外连接和内连接区别】 内连接只能查到16条数据&#xff0c;dept_id为null的值查不到 左外连接可以查到17条所有数据…

中文乱码处理

&#x1f600;前言 中文乱码处理 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&#x1f609;&#x1f609; 在csdn获奖荣誉: &#x1f3c…

改进探索性数据分析的实用技巧!

Datawhale干货 译者&#xff1a;张峰&#xff0c;Datawhale成员 让 EDA 更简单&#xff08;更美观&#xff09;的实用指南&#xff01; 原文链接&#xff1a;https://towardsdatascience.com/practical-tips-for-improving-exploratory-data-analysis-1c43b3484577 介绍 探索性…

fastadmin iis伪静态应用入口文件index.php

<?xml version"1.0" encoding"UTF-8"?> <configuration><system.webServer><rewrite><rules><rule name"OrgPage" stopProcessing"true"><match url"^(.*)$" /><conditions…

骨传导耳机哪款比较好,几款骨传导耳机品牌推荐

相对于传统耳机&#xff0c;骨传导耳机的佩戴方式更加舒适。传统耳机需要插入耳道&#xff0c;可能会造成不适甚至痛感&#xff0c;而骨传导耳机则不需要直接接触耳朵&#xff0c;大大提高了佩戴的舒适度。并且骨传导耳机可以实现外界环境的感知。传统耳机会将耳朵与外界隔绝&a…

Java智慧工地源码:进度、质量、 成本、安全尽在掌握

智慧工地是一种崭新的工程全生命周期管理理念。智慧工地是智慧城市在建筑施工领域的延伸&#xff0c;是智慧城市的“基石”。随着工程信息化管理技术的发展&#xff0c;移动互联网、物联网、AI、大数据等新技术与施工现场业务场景深度融合&#xff0c;智慧工地已成为建筑工地信…

SpringCloud学习笔记(九)_使用Java类加载SpringBoot、SpringCloud配置文件

我们都知道平常在使用SpringBoot和SpringCloud的时候&#xff0c;如果需要加载一两个配置文件的话我们通常使用Value(“${属性名称}”)注解去加载。但是如果配置文件属性特别多的时候使用这种方式就显得特别的不友好了。 比如说&#xff0c;我们要加载下方这个名为application.…

nmon的安装与使用

一、Linux服务器配置信息 操作系统&#xff1a;CentOS 7.6 64位&#xff08;可用命令&#xff1a;cat /etc/redhat-release和uname -a查看&#xff09; CPU&#xff1a;1核&#xff08;可用命令top查看&#xff09; 内存&#xff1a;2GB&#xff08;可用命令free查看&#xff…

胖小酱之疯狂的魔术师

在外国&#xff0c;魔术&#xff0c;最早的记录出现在埃及&#xff0c;大约是在西元前2600年&#xff0c;也就是距今四千多年前。而作为具体节目表演&#xff0c;至少在两千多年前就已经出现&#xff0c;西汉元封三年&#xff0c;汉武帝举行百戏盛会&#xff0c;盛会上即有中国…

win11下MySQL8详细安装教程

文章目录 新建配置文件 my.ini初始化数据库安装服务启动服务 新建配置文件 my.ini 初始化数据库 mysqld --initialize --console记下初始密码 安装服务 mysqld --install启动服务 net start mysql修改密码请看另外文章 windows修改MySQL密码

京东自动抢茅台脚本

目前&#xff0c;在多家电商平台都可以抢购茅台酒&#xff0c;包括天猫超市、京东、天猫会员店、国美、苏宁、网易严选等渠道&#xff0c;消费者使用一台手机便可参与抢购&#xff0c;不过&#xff0c;很多消费者依旧不清楚用手机抢茅台怎么抢&#xff0c;因为抢购的人实在太多…

算法通关村十三关 | 数组字符串加法专题

1. 数组实现整数加法 题目&#xff1a;LeetCode66&#xff0c;66. 加一 - 力扣&#xff08;LeetCode&#xff09; 思路 我们只需要从头到尾依次运算&#xff0c;用常量标记是否进位&#xff0c;需要考虑的特殊情况是digits [9,9,9]的时候进位&#xff0c;我们组要创建长度加1…

JCTools Mpsc源码详解(二) MpscArrayQueue

MpscArrayQueue是一个固定大小的环形数组队列,继承自ConcurrentCircularArrayQueue MpscArrayQueue的特点: 环形队列底层数据结构为数组有界 看一下MpscArrayQueue的属性(填充类除外)--- //生产者索引 private volatile long producerIndex; //生产者边界 private volatile…

NSSCTF——Web题目1

目录 一、[LitCTF 2023]PHP是世界上最好的语言&#xff01;&#xff01; 二、[LitCTF 2023]Ping 三、[SWPUCTF 2021 新生赛]easyupload1.0 四、[SWPUCTF 2021 新生赛]easyupload2.0 五、[SWPUCTF 2021 新生赛]caidao 一、[LitCTF 2023]PHP是世界上最好的语言&#xff01;&a…

QA3

1. file_name.split(.)[0] 这是什么意思&#xff1f; 这行代码是将文件名按照点&#xff08;.&#xff09;进行分割&#xff0c;并返回分割后的列表中的第一个元素。在许多编程语言中&#xff0c;点通常用作文件名和扩展名之间的分隔符。通过使用split(.)函数&#xff0c;我们…