LeetCode 426. 将二叉搜索树转化为排序的双向链表(BST中序循环遍历)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

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

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

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

示例 1:
在这里插入图片描述

示例 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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-binary-search-tree-to-sorted-doubly-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 采用二叉树的非递归遍历写法即可
/*
// 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* treeToDoublyList(Node* root) {if(!root)return root;stack<Node*> stk;Node *cur, *head = NULL, *prev = NULL;while(root || !stk.empty()){while(root){stk.push(root);root = root->left;}cur = stk.top();stk.pop();if(!head)head = cur;//头结点root = cur->right;cur->left = prev;//当前节点的前驱if(prev)prev->right = cur;//前面节点的后驱prev = cur;//前节点更新}cur->right = head;//最后的尾节点后继是头head->left = cur;//头节点的前驱是尾节点return head;//返回头}
};

12 ms 7.4 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

ASP.NET中Request.IsAuthenticated和Request.User.Identity.IsAuthenticated的区别

Reflector 查看 System.Web.dll 中 HttpRequest.cs 的代码&#xff1a; public bool IsAuthenticated {get{return (((this._context.User ! null) && (this._context.User.Identity ! null)) && this._context.User.Identity.IsAuthenticated);} }所以说这两者…

LeetCode 285. 二叉搜索树中的顺序后继(中序遍历)

文章目录1. 题目2. 解题1. 题目 给你一个二叉搜索树和其中的某一个结点&#xff0c;请你找出该结点在树中顺序后继的节点。 结点 p 的后继是值比 p.val 大的结点中键值最小的结点。 示例 1: 输入: root [2,1,3], p 1 输出: 2 解析: 这里 1 的顺序后继是 2。 请注意 p 和…

matlab 更改jdk版本,程序员怎么修改微信号

2020.6.5&#xff0c;注定是个不平凡的日子&#xff0c;因为微信可以改微信号了。那么&#xff0c;作为一个程序员&#xff0c;我们需要怎么修改微信号才能携带程序员气息。。。修改条件满足以下条件即可一年内没有修改过微信号安卓客户端&#xff0c;且版本大于7.0.15之后则点…

LeetCode 510. 二叉搜索树中的中序后继 II(查找右子树或者祖父节点)

文章目录1. 题目2. 解题1. 题目 给定一棵二叉搜索树和其中的一个节点 node &#xff0c;找到该节点在树中的中序后继。 如果节点没有中序后继&#xff0c;请返回 null 。 一个结点 node 的中序后继是键值比 node.val大所有的结点中键值最小的那个。 你可以直接访问结点&…

mysql set类型 查询,MYSQL SET字段类型怎么查询

昨天自己在写一个dedecms功能时突然用到了解dedecms中flag字段&#xff0c;但里面用的是set类型&#xff0c;开始直接查询where xx 可查出单字符&#xff0c;但是多个是就不好查了&#xff0c;下面我来总结一下set字段查询方法吧。SET可以包含最多64个成员&#xff0c;其值为一…

一个关于Remoting的简单例子

前言 今天在整理以前写的一些demo&#xff0c;看到一个关于remoting的例子。好久不用remoting了&#xff0c;果断记录一下。 什么是Remoting 简单回顾下&#xff1a; 1.Remoting是一种远程通信&#xff0c;或者说跨应用程序&#xff08;域&#xff09;通信的技术,在C/S架构的程…

php mqtt qos,Mqtt Qos 深度解读

1.QoS含义 &#xff1a;Quality of Service,服务质量2.作用域发布者的Qos订阅者的Qos3.等级与作用level 0&#xff1a;最多一次的传输level 1&#xff1a;至少一次的传输&#xff0c;(鸡肋)level 2&#xff1a; 只有一次的传输4.交互过程qos0对于qos1而言&#xff0c;对于clien…

LeetCode 1502. 判断能否形成等差数列

文章目录1. 题目2. 解题1. 题目 给你一个数字数组 arr 。 如果一个数列中&#xff0c;任意相邻两项的差总等于同一个常数&#xff0c;那么这个数列就称为 等差数列 。 如果可以重新排列数组形成等差数列&#xff0c;请返回 true &#xff1b;否则&#xff0c;返回 false 。 …

关键字搜索.sql

if exists (select * from dbo.sysobjects where id object_id(N[dbo].[f_search]) and xtype in (NFN, NIF, NTF))drop function [dbo].[f_search]GO if exists (select * from dbo.sysobjects where id object_id(N[序数表]) and OBJECTPROPERTY(id, NIsUserTable) 1)drop…

matlab2017调用vgg19,VGG19模型训练+读取

VGG-19的介绍和训练这里不做说明,网上资源很多,而且相对比较简单.本博文主要介绍VGG-19模型调用官方已经训练好的模型,进行测试使用.[TOC]VGG-19模型简单介绍VGG模型使用VGG结构模型VGG具体参数模型VGG-19模型文件介绍这里是重难点,VGG-19模型存储的方式有点复杂可以通过作者文…

LeetCode 1504. 统计全 1 子矩形(记录左侧的连续1的个数)

文章目录1. 题目2. 解题1. 题目 给你一个只包含 0 和 1 的 rows * columns 矩阵 mat &#xff0c; 请你返回有多少个 子矩形 的元素全部都是 1 。 示例 1&#xff1a; 输入&#xff1a;mat [[1,0,1],[1,1,0],[1,1,0]] 输出&#xff1a;13 解释&#xff1a; 有 6 个 1x1 的矩…

iverilog命令选项解释

随着数字系统设计规模的增大&#xff0c;verilog文件几乎都会分成几个文件模块来管理&#xff0c;就如一个大工程一样&#xff0c;并且相互之间都会有调用关系&#xff0c;典型的就是&#xff0c;有一个文件要调用其他的文件实例&#xff0c;但是本身却不被任何模块所调用&…

matlab中ode23s使用方法,MATLAB中ode23函数,龙格库塔函数

今天说一说MATLAB中ode23函数的原理&#xff0c;在网上看了好多&#xff0c;但是不知道是怎么计算的&#xff0c;就知道是那么用的&#xff0c;但是最后结果咋回事不知道&#xff0c;今天来讲一讲是怎么计算的。首先来个程序&#xff1a;function feg6fun(t,y)f-y^3-2;end上面是…

勘误和声明

背景&#xff1a; 昨天在博客园浏览别人的文章《C# 不要自动四舍五入!》&#xff08;地址&#xff1a;http://www.cnblogs.com/eweb/archive/2012/05/18/2507468.html&#xff09;时&#xff0c;发现了自己之前的文章《C#&#xff0c;double和decimal数据类型以截断的方式保留指…

LeetCode 1503. 所有蚂蚁掉下来前的最后一刻(脑筋急转弯)

文章目录1. 题目2. 解题1. 题目 有一块木板&#xff0c;长度为 n 个 单位 。一些蚂蚁在木板上移动&#xff0c;每只蚂蚁都以 每秒一个单位 的速度移动。其中&#xff0c;一部分蚂蚁向 左 移动&#xff0c;其他蚂蚁向 右 移动。 当两只向 不同 方向移动的蚂蚁在某个点相遇时&a…

matlab多元线性回归bint,MATLAB中多元线性回归的例子课件

《MATLAB中多元线性回归的例子课件》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《MATLAB中多元线性回归的例子课件(12页珍藏版)》请在人人文库网上搜索。1、MATLAB中多元线性回归的例子,2.线性回归,bregress(y,X) b,bint,r,rint,sregress(y,X,alpha),输入: y因变量…

LeetCode 1246. 删除回文子数组(区间DP)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 arr&#xff0c;每一次操作你都可以选择并删除它的一个 回文 子数组 arr[i], arr[i1], ..., arr[j]&#xff08; i < j&#xff09;。 注意&#xff0c;每当你删除掉一个子数组&#xff0c;右侧元素都会自行向前移动填补空…

开始学习ZendFramework框架了

开始学习ZendFramework框架了 开始学习ZendFramework框架了&#xff01;#&#xffe5;%……&&#xff08;加油&#xff01;&#xff01;&#xff01;posted on 2012-05-21 19:51 free-acking 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/acking/archive…

lamp ci框架 php配置文件,LAMP环境搭建

一、准备工作1、安装编译工具gcc、gcc-c注意解决依赖关系&#xff0c;推荐使用yum安装&#xff0c;若不能联网可使用安装光盘做为yum源——1)编辑yum配置文件&#xff1a;mount /dev/sr0 /mnt/cdromvim /etc/yum.repos.d/CentOS-Media.repo[c6-media]nameCentOS-$releasever - …

LeetCode 573. 松鼠模拟(数学)*

文章目录1. 题目2. 解题1. 题目 现在有一棵树&#xff0c;一只松鼠和一些坚果。位置由二维网格的单元格表示。 你的目标是找到松鼠收集所有坚果的最小路程&#xff0c;且坚果是一颗接一颗地被放在树下。 松鼠一次最多只能携带一颗坚果&#xff0c;松鼠可以向上&#xff0c;向下…