每天一道leetcode:剑指 Offer 36. 二叉搜索树与双向链表(中等深度优先遍历递归)

news2025/1/16 1:42:42

今日份题目:

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

示例

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

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

题目思路

根据二叉搜索树的性质,我们知道,中序遍历可以得到树节点的从小到大的排序,那我们就在中序递归遍历的基础上改变链表。使用pre节点记录上个节点的位置,使用cur节点记录当前节点的位置,使用head节点记录链表头部的位置,然后每次让pre节点和cur节点互相指,pre左cur右,最后让head和pre节点相互指就能得到结果链表了。具体看代码注释。

补充:中序遍历

树的一种遍历方法,遍历顺序是左->根->右,如果左或右是树而非节点,那么就在子树中继续左根右,最后递归得到顺序。

int inOrder(Node* root)
{
    if(root->left) inOrder(root->left);
    return root->val;
    if(root->right) inOrder(root->right);
}

代码

/*
// 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==NULL) return;
        //中序遍历
        dfs(cur->left);
        //左边pre,右边cur,二者相连,pre继续向后走直到结束
        if(pre!=NULL) pre->right=cur;
        else head=cur;
        cur->left=pre;
        pre=cur;
        dfs(cur->right);
    }

    Node* treeToDoublyList(Node* root) 
    {
        if(root==NULL) return NULL;
        dfs(root);
        //中间连好了,头尾相连
        head->left=pre;
        pre->right=head;
        return head;
    }
};

提交结果

欢迎大家在评论区讨论,如有不懂的部分,欢迎在评论区留言!

更新不易,宝子们点个赞支持下,谢谢!

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

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

相关文章

ps怎么压缩图片大小200k?图片压缩技巧来啦

ps是我们常用的一款图像处理软件,有很多功能,可以帮助我们有效地进行图片编辑和创造工作,当然用它也可以压缩图片的大小,如果你还不知道怎么用ps压缩图片大小,不妨继续看下去吧。 方法一:调整图片品质 1、…

用AI攻克“智能文字识别创新赛题”,这场大学生竞赛掀起了什么风潮?

文章目录 一、前言1.1 大赛介绍1.2 项目背景 二、基于智能文字场景个人财务管理创新应用2.1 作品方向2.2 票据识别模型2.2.1 文本卷积神经网络TextCNN2.2.2 Bert 预训练微调2.2.3 模型对比2.2.4 效果展示 2.3 票据文字识别接口 三、未来展望 一、前言 1.1 大赛介绍 中国大学生…

深度学习2:过拟合解决办法

1.通过噪声正则化解决过拟合问题 噪声正则化是一种解决过拟合问题的有效方法。该方法通过向训练数据添加随机噪声,从而使模型更加鲁棒,并减少对训练数据的过度拟合。噪声正则化可以通过多种方式实现。其中一种常见的方法是在输入数据中添加随机噪声。例…

2682. 找出转圈游戏输家

题目描述&#xff1a; n 个朋友在玩游戏。这些朋友坐成一个圈&#xff0c;按 顺时针方向 从 1 到 n 编号。从第 i 个朋友的位置开始顺时针移动 1 步会到达第 (i 1) 个朋友的位置&#xff08;1 < i < n&#xff09;&#xff0c;而从第 n 个朋友的位置开始顺时针移动 1 步…

华为OD机试 - 公共子串计算(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》。 刷的越多&…

AI助力林业有害生物防治,基于YOLOv5开发构建林业有害生物检测识别系统

林业有害生物防治是指针对危害森林健康的昆虫、病原菌、杂草等有害生物进行预防和控制的活动。这些有害生物可能会导致树木的衰弱、死亡&#xff0c;破坏森林生态系统的平衡&#xff0c;影响木材产量和质量&#xff0c;甚至对人类社会造成经济和环境损失。 以下是一些常见的林业…

MySQL数据库-进阶篇

进阶篇 一、MySQL体系结构 二、存储引擎 简介 存储引擎特点 InnoDB &#xff08;默认&#xff09; MyISAM Memory 存储引擎区别 存储引擎选择 ​​ 小结 三、索引 配置Linux版本的mysql --nodesp和--force linux防火墙相关操作 https://blog.csdn.net/weixin_437…

蓝牙、语音合二为一,启英泰伦CI231系列AI语音BLE芯片

随着智能家居的快速发展和人们对个性化体验的追求&#xff0c;近期启英泰伦推出了令人振奋的创新产品——CI231系列AI语音BLE芯片。这一系列芯片将语音与BLE技术巧妙融合&#xff0c;为用户提供了更丰富的设备连接选项和更个性化的语音交互体验。 CI231系列芯片实物图 CI231系…

Python流程控制指南:实例解析与技巧揭秘

流程控制是编程中至关重要的概念&#xff0c;它允许我们按照特定的条件执行代码块&#xff0c;实现逻辑控制和决策。本篇博客将深入讨论Python语法中的流程控制&#xff0c;结合实际案例为你解析如何巧妙地应用流程控制来构建更强大的程序。 条件语句&#xff1a;if、elif和el…

【C++学习手札】一文带你初识运算符重载

食用指南&#xff1a;本文在有C基础的情况下食用更佳 &#x1f340;本文前置知识&#xff1a; C类 ♈️今日夜电波&#xff1a;クリームソーダとシャンデリア—Edo_Ame江户糖 1:20 ━━━━━━️&#x1f49f;──────── 3:40 …

基于Python的HTTP代理爬虫开发初探

前言 随着互联网的发展&#xff0c;爬虫技术已经成为了信息采集、数据分析的重要手段。然而在进行爬虫开发的过程中&#xff0c;由于个人或机构的目的不同&#xff0c;也会面临一些访问限制或者防护措施。这时候&#xff0c;使用HTTP代理爬虫可以有效地解决这些问题&#xff0…

C4D那些超酷的插件,你知道几个?

Cinema 4D 是最著名的 3D 软件之一&#xff0c;由于其便利性和多功能性&#xff0c;艺术家和工作室经常在许多领域使用。尽管它被认为是一款一体化软件&#xff0c;但您仍然可以找到许多很酷的工具或插件&#xff0c;帮助您获得更好的结果并节省时间和金钱。 赞奇云工作站带领…

解放双手!写了个小工具给喜欢的博主一键三连

1. 写在前面 大家写博客的可能都知道&#xff0c;有时候我们或多或少会认识一些志同道合的博主。大家在写博客的时候偶尔也都会彼此之间相互支持一下 再如果看到自己感兴趣的文章&#xff0c;想收藏一下。这些需求我们目前大部分人都自己用手去操作&#xff0c;这是非常费力的…

恒运资本:布林线什么意思?

布林线是一种经过股票价格的标准差核算出涨跌起伏的技能剖析方法。这种剖析方法由约翰布林在1980年左右开发而来&#xff0c;是一种常用的股市剖析东西。本文将从前史、原理、应用等多个视点叙述布林线的含义&#xff0c;以及它对出资者所带来的意义。 一、前史 布林线在1983年…

解决方案:如何在 Amazon EMR Serverless 上执行纯 SQL 文件?

长久已来&#xff0c;SQL以其简单易用、开发效率高等优势一直是ETL的首选编程语言&#xff0c;在构建数据仓库和数据湖的过程中发挥着不可替代的作用。Hive和Spark SQL也正是立足于这一点&#xff0c;才在今天的大数据生态中牢牢占据着主力位置。在常规的Spark环境中&#xff0…

目前互联网企业知识库使用情况?企业知识库搭建缺陷有什么?

目前互联网企业普遍使用知识库作为内部和外部知识管理的工具。知识库通过集中存储和组织企业内部的知识和信息&#xff0c;使其易于访问和共享 目前互联网企业知识库使用情况&#xff1a; 内部知识管理&#xff1a; 知识库用于内部员工的知识共享和知识管理。企业可以将各个…

5款专业思维导图软件推荐:提升效率,促进协作!

思维导图作为一种有效的信息组织和可视化工具&#xff0c;已经广泛地应用于学习、工作和生活中。通过思维导图&#xff0c;我们能够以高效的方式把握和处理大量信息。 但到了挑选软件的环节&#xff0c;市面上层出不穷的思维导图软件&#xff0c;容易让人看花眼&#xff0c;不知…

matlab使用教程(17)—广度优先和深度优先搜索

1.可视化广度优先搜索和深度优先搜索 此示例说明如何定义这样的函数&#xff1a;该函数通过突出显示图的节点和边来显示 bfsearch 和 dfsearch 的可视化结果。 创建并绘制一个有向图。 s [1 2 3 3 3 3 4 5 6 7 8 9 9 9 10]; t [7 6 1 5 6 8 2 4 4 3 7 1 6 8 2]; G dig…

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

项目场景&#xff1a; 在虚拟机上通过Docker创建Nacos容器&#xff0c;已经创建成功&#xff0c;查看Nacos启动日志也是成功。但通过端口号加8848/nacos&#xff08;如&#xff1a;http://192.168.88.10:8848/nacos&#xff09;无法访问到Nacos管理页面。 问题描述 原因分析&a…

DC电源模块生产用料扎实的表现

BOSHIDA DC电源模块生产用料扎实的表现 随着现代科技的不断发展&#xff0c;DC电源模块已经被广泛应用于各种电子设备中。不同于其它电子元器件&#xff0c;DC电源模块生产所需用料的扎实程度对其性能的影响非常大。下面&#xff0c;本文将就DC电源模块生产用料扎实的表现进行…