【一刷《剑指Offer》】面试题 27:二叉搜索树与双向链表

牛客对应题目链接:二叉搜索树与双向链表_牛客题霸_牛客网 (nowcoder.com)

力扣对应题目链接:LCR 155. 将二叉搜索树转化为排序的双向链表 - 力扣(LeetCode)


一、《剑指 Offer》对应内容


二、分析题目

上面力扣上的这道题目和牛客上的不太一样,力扣上的是双向循环链表,而牛客上的并不是循环链表,所以返回的是头结点。


三、代码

//牛客
/*
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}
};*/
class Solution {
public:void InOrderConvert(TreeNode* cur, TreeNode*& prev) {if(cur==nullptr) return;InOrderConvert(cur->left, prev);cur->left=prev;if(prev)prev->right=cur;prev=cur;InOrderConvert(cur->right, prev);}TreeNode* Convert(TreeNode* pRootOfTree) {TreeNode* prev=nullptr;InOrderConvert(pRootOfTree, prev);TreeNode* head=pRootOfTree;while(head && head->left)head=head->left;return 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:void InOrderConvert(Node* cur, Node*& prev) {if(cur==nullptr) return;InOrderConvert(cur->left, prev);cur->left=prev;if(prev)prev->right=cur;prev=cur;InOrderConvert(cur->right, prev);}Node* treeToDoublyList(Node* root) {if(root==nullptr) return nullptr;Node* prev=nullptr;InOrderConvert(root, prev);Node* head=root;Node* tail=root;while(head && head->left)head=head->left;while(tail && tail->right)tail=tail->right;head->left=tail;tail->right=head;return 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 {
private:Node* prev;Node* head;
public:void dfs(Node* cur){if(cur==NULL) return;dfs(cur->left);if(prev) prev->right=cur;else head=cur;cur->left=prev;prev=cur;dfs(cur->right);}Node* treeToDoublyList(Node* root) {if(root==NULL) return NULL;dfs(root);head->left=prev;prev->right=head;return head;}
};

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

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

相关文章

AGM DAP-LINK 离线烧录报错信息分析

DAP-LINK 支持离线烧录。 即:先把要烧录的bin 烧录到DAP-LINK 中;然后DAP-LINK 可以脱离PC,上电后通过按键对目标板进行烧录。 CMSIS-DAP模式 跳线JGND断开,状态LED D4快闪,D3常亮(串口状态)。…

deepin开发web前端:探索、挑战与无限可能

deepin开发web前端:探索、挑战与无限可能 在数字化浪潮汹涌的时代,Web前端作为连接用户与数字世界的桥梁,其重要性日益凸显。而deepin作为一款优秀的开源操作系统,为Web前端开发者提供了广阔的舞台。本文将围绕deepin开发Web前端…

接口设计的最佳实践-下篇

大多数程序员,做得最多的事,也不过是写接口这件事而已。 今天继续总结下接口设计需要注意的点。尽量每种都给出具体的场景、案例等,希望大家能有所收获。 1、接口幂等 幂等性:是指一个操作或者一个服务,无论执行多少…

小程序怎样进行本地存储的读、写、删、清?

小程序进行本地存储的读、写、删、清操作,可以通过微信小程序提供的API来实现。这些API分为同步和异步两种类型,以满足不同的使用场景和需求。 同步操作 同步操作会阻塞后续的代码执行,直到操作完成。 写入本地缓存(写&#xf…

Vue3 - Mac系统用文本编辑写html不显示效果的坑

平时在win系统下,可以直接对文本进行编辑,非常的舒服。 在mac系统中,也有类似的功能,就是文本编辑,没想到居然还有坑。 这是我mac系统中创建的html文件,想着没有几行代码,就没有开编辑器了&am…

C语言 | Leetcode C语言题解之第125题验证回文串

题目&#xff1a; 题解&#xff1a; bool isalumn(char c) {return (c > a && c < z) || (c > A && c < Z) || (c > 0 && c < 9); }bool isPalindrome(char* s) {for (int left 0, right strlen(s) - 1; left < right; left, …

【数据库系统概论】事务

概述 在数据库系统中&#xff0c;事务&#xff08;Transaction&#xff09;是指一组作为单个逻辑工作单元执行的操作。这些操作要么全部成功&#xff08;提交&#xff09;&#xff0c;要么全部失败&#xff08;回滚&#xff09;。事务的主要目的是确保数据库的完整性和一致性&…

AI与NLP的完美结合:揭秘ChatGPT

AI与NLP的完美结合&#xff1a;揭秘ChatGPT 一、AI大模型的发展历程 AI大模型的发展可追溯到早期的深度学习技术。深度学习通过多层神经网络处理复杂的数据模式&#xff0c;显著提升了图像识别、语音识别等领域的性能。随后&#xff0c;研究人员将注意力转向NLP&#xff0c;开…

【传知代码】多视图3D目标检测位置嵌入变换(论文复现)

前言&#xff1a;三维目标检测技术正逐渐成为计算机视觉领域的重要研究方向。特别是在自动驾驶、增强现实&#xff08;AR&#xff09;、虚拟现实&#xff08;VR&#xff09;以及机器人导航等应用中&#xff0c;对三维空间内目标的精准检测与定位显得尤为重要。然而&#xff0c;…

人脸解锁优化关键过程

一.人脸解锁的关键过程 1. 按下power键 2. 屏幕点亮 3. 打开前摄 4. 获取第一帧并传给算法 5. 算法完成并返回结果 6. 解锁完成并关闭相机 二. 相机优化点 1. 定制人脸解锁自己的pipeline,去掉不必要的node,理论上只需要一个preview的pipeline 2. 使用AE warm up&#xff0c;减…

SAP_SD模块-销售交货并开票后发现物料没维护价格的完整处理方法(含POD功能)

销售流程完结后&#xff0c;发现物料价格没维护时&#xff0c;如何处理 一、业务背景&#xff1a; 1、问题发现时间&#xff1a;2024年6月2日&#xff1b; 2、问题描述&#xff1a; 2024年5月份的单据业务存在交货成本和开票成本为0的单据&#x…

【JavaScript脚本宇宙】揭秘HTTP请求库:深入理解它们的特性与应用

深度揭秘&#xff1a;六大HTTP请求库的比较与应用 前言 在这篇文章中&#xff0c;我们将探讨六种主要的HTTP请求库。这些库为处理网络请求提供了不同的工具和功能&#xff0c;包括Axios、Fetch API、Request、SuperAgent、Got和Node-fetch。通过本文&#xff0c;你将对每个库…

PyCharm如何更换解析器为Anaconda,如何自己切换python环境

自己使用了Anaconda创建了一个环境&#xff1a; 如何在工具PyCharm中切换自定义的python环境呢&#xff1f; 1. 点击 设置 2. 项目&#xff1a;python - Python解析器 此时会发现&#xff0c;只有一个默认的版本。 3. 点击 添加解析器 - 添加本地解析器 4. 选择 conda 环境…

AI智能语音机器人系统如何对接科大讯飞接口

关于AI语音机器人的介绍有很多&#xff0c;但是由于商业化&#xff0c;没有一个能真正说明白的&#xff0c;当然&#xff0c;我们搭建的AI智能机器人系统也是商业化的&#xff0c;毕竟业务是做这方面的&#xff0c;但是价格绝对是公道的&#xff0c;废话不多说了&#xff0c;我…

探索API接口:技术深度解析与应用实践

在当今的软件开发和数据交换领域&#xff0c;API&#xff08;应用程序编程接口&#xff09;已经成为了一个不可或缺的工具。它允许不同的软件应用程序或组件之间进行交互和通信&#xff0c;从而实现了数据的共享和功能的扩展。本文将深入探讨API接口的技术原理、设计原则以及在…

Qt各发布版本介绍与选择

一.Qt各个主要版本介绍 1.Qt4 Qt4的第一个版本是Qt 4.0&#xff0c;发布于2005年6月1日。 Qt 4的最后一个版本是Qt 4.8.7&#xff0c;发布时间是2015年6月10日。 2.Qt5 &#xff08;1&#xff09;Qt5的第一个版本是Qt 5.0&#xff0c;发布于2012年12月19日。 &#xff08;2&…

ubuntu安装notion

一、背景&#xff1a; 不用windwos系统&#xff0c;完全可以&#xff0c;然后基本软件都有&#xff0c;怎么安装notion呢 二、步骤 1. 更新源 echo "deb [trustedyes] https://apt.fury.io/notion-repackaged/ /" | sudo tee /etc/apt/sources.list.d/notion-repa…

基于字典树可视化 COCA20000 词汇

COCA20000 是美国当代语料库中最常见的 20000 个词汇&#xff0c;不过实际上有一些重复&#xff0c;去重之后大概是 17600 个&#xff0c;这些单词是很有用&#xff0c;如果能掌握这些单词&#xff0c;相信会对英语的能力有一个较大的提升。我很早就下载了这些单词&#xff0c;…

基于Django的博客系统之用HayStack连接elasticsearch增加搜索功能(五)

上一篇&#xff1a;搭建基于Django的博客系统数据库迁移从Sqlite3到MySQL&#xff08;四&#xff09; 下一篇&#xff1a;基于Django的博客系统之增加类别导航栏&#xff08;六&#xff09; 功能概述 添加搜索框用于搜索博客。 需求详细描述 1. 添加搜索框用于搜索博客 描…

【数据密集型系统设计】软件系统的可靠性、可伸缩性、可维护性

文章目录 一. 数据密集型程序的特点以及遇到的问题二. 可靠性 : 即使出现问题&#xff0c;也能继续正确工作1 硬件故障2. 软件错误3. 人为错误 二. 可伸缩性1. 描述负载与推特的例子2. 描述性能-延迟和响应时间3. 应对负载的方法 四. 可维护性1. 可操作性&#xff1a;人生苦短&…