JZ36 二叉搜索树与双向链表

news2024/11/26 10:47:53

问题描述:

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。

问题要求:

1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指

   针需要指向前驱,树中节点的右指针需要指向后继。


2.返回链表中的第一个节点的指针。


3.函数返回的TreeNode,有左右指针,其实可以看成一个双向链表的数据结构。

4.你不用输出双向链表,程序会根据你的返回值自动打印输出。

输出描述:

如图所示:

示例1:

输入:
{10,6,14,4,8,12,16}
返回值:
From left to right are:4,6,8,10,12,14,16;From right to left are:16,14,12,10,8,6,4;
说明:
输入题面图中二叉树,输出的时候将双向链表的头节点返回即可。  

示例2:

输入:
{5,4,#,3,#,2,#,1}
返回值:
From left to right are:1,2,3,4,5;From right to left are:5,4,3,2,1;
说明:
                    5
                  /
                4
              /
            3
          /
        2
      /
    1
树的形状如上图       

 

 问题分析:

将搜索二叉树转换成一个排序的双向链表,从二叉树的性质可以知道其中序遍历对应的是有序的,

所以形成的双向链表的顺序必须跟着搜索二叉树的中序遍历走,这样才保证是有序的,其次我们需

要将二叉树的左右指针当做双向链表的前后指针,左为前右为后,从而通过中序遍历来确定双向链

表。

问题实现:

代码实现:

class Solution {
public:

	void InOrder(TreeNode*cur,TreeNode*& prev)
	{
		if(cur == nullptr)
		{
			return;
		}

		InOrder(cur->left,prev);
		cur->left = prev;

		if(prev)
		{
			prev->right = cur;
		}

		prev = cur;

		InOrder(cur->right,prev);


	}
    TreeNode* Convert(TreeNode* pRootOfTree) {
        TreeNode* prev = nullptr;
		InOrder(pRootOfTree,  prev);
		TreeNode* head = pRootOfTree;
		while(head && head->left)
		{
			head = head->left;
		}

		return head;
    }
};

这就是对应的实现。

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

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

相关文章

“MyBatis进阶:分页与特殊字符处理“

目录 引言1. MyBatis的分页1.1 分页原理1.2 使用插件实现分页 2. MyBatis中特殊字符处理2.1 特殊字符的问题2.2 使用转义字符 总结 引言 在使用MyBatis进行数据库操作时,我们经常会遇到一些高级的需求,例如分页查询和特殊字符处理。本文将深入探讨如何在…

面试题(二)

目录 一.集合 (1) LinkedHashMap(JDK 1.8) (2) ArrayList (3) HashMap (4) ConcurrentHashMap 二. IO流 (1) 分类 (2) 应用 三.多线程 (1) 线程状态 (2) 死锁 (3) 应用 (4) 要点 (5) 线程池 返回 ThreadPoolExecutor 类分析 线程池原理分析 四. 数据库 (1) …

聚水潭无需API开发连接伙伴云,实现新增订单信息自动同步到表单汇总

聚水潭用户使用场景: 电商行业通常使用聚水潭作为企业的ERP系统。然而,每当聚水潭产生新订单时,企业人员常常需要将订单信息手动复制并录入到伙伴云存储、汇总,包括订单单号、状态、金额等20多项信息。这种人工手动复制和录入的方…

接口文档管理解决方案调研及Torna+Smart-doc的使用

文章目录 一、现状二、需求三、调研Swagger官方地址介绍 Knife4j官方地址介绍 Apifox官方地址介绍 Smart-doc Torna官方地址介绍 EasyYapi Yapi官方地址介绍 四、对比(一)Swagger1、部署方式2、优点3、缺点4、分享方式 (二)Knif…

心电芯片ADS1291的国产替代芯片LH001-91

2023年,在全球芯片市场的紧张局势下,国外芯片的价格和货量也随着时局的影响而变化,价格相对来说明会变得高昂。在此种大背景下,模拟芯片与GPU芯片都曾是最为紧缺的种类,并且价格也是高昂且不稳定,有时下了订…

档案库房温湿度调节的一些方法【经验】

1.前言背景 档案的寿命与档案库房的温湿度密切相关。不适宜的温湿度不仅可单独地作用于档案,而且可加速其他因素对档案的破坏。为了使档案库房的温湿度等符合档案的要求,需采取一定的措施,即对档案库房的温湿度进行控制与调节。 档案库房的…

月活近千万,连续 365 天无故障:货拉拉怎么做稳定性指标度量?

一分钟精华速览 每一位被故障折磨的稳定性负责人,都或多或少面临自证的困境:如何证明今年的稳定性工作是出色的?在无法完全避免故障发生的前提下,如何证明稳定性保障工作的价值?在团队和工具尚不完备时,如…

17.2.4 【Linux】通过systemctl分析各服务之间的相依性

使用list-dependencies时,所列出的default.target其实是muli-user.target的内容。multi-user.target 其实还会用到 basic.target getty.target remote-fs.target 三大项目, 而 basic.target 又用到了 sockets.target sysinit.target timers.target。 r…

使用Termux在安卓手机上搭建Hexo博客网站,并发布到公网访问

文章目录 1. 安装 Hexo2. 安装cpolar内网穿透3. 公网远程访问4. 固定公网地址 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章,在几秒内,即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并…

Python requests实现图片上传接口自动化测试

最近帮别人写个小需求,需要本地自动化截图,然后图片自动化上传到又拍云,实现自动截图非常简单,在这里就不详细介绍了,主要和大家写下,如何通过Pythonrequests实现上传本地图片到又拍云服务器。 话不多说&a…

电商小白必看:如何快速批量查询快递物流信息?

随着电商行业的不断发展,快递订单的数量也在持续增加。对于物流公司和商家来说,查询快递订单的速度和效率是非常重要的。而如果每次只能查询一个快递订单,无疑是一种低效的方式。那么有没有一种方法可以一次性批量查询数万个快递订单号呢&…

若依前后端分离版本项目总结笔记

若依前后端分离学习笔试 1.路由问题 注意这个是前端找到你的路由的路径。 2.表格开关按钮快速实现 <el-table-column label"状态" align"center" key"status"><template slot-scope"scope"><el-switchv-model"s…

笔记汇总2(中断、GDB、编程实例)

前言 本文主要是一些学习笔记的汇总&#xff0c;主要参考公众号&#xff1a;嵌入式与Linux那些事&#xff0c;GDB多线程调试&#xff0c;自实现unique_ptr,share_ptr&#xff0c;宏&#xff0c;线程池仅供自己学习使用。 中断与异常有何区别? 中断是指外部硬件产生的一个电信…

【Linux】socket编程(二)

目录 前言 TCP通信流程 TCP通信的代码实现 tcp_server.hpp编写 tcp_server.cc服务端的编写 tcp_client.cc客户端的编写 整体代码 前言 上一章我们主要讲解了UDP之间的通信&#xff0c;本章我们将来讲述如何使用TCP来进行网络间通信&#xff0c;主要是使用socket API进…

whisper 语音识别项目部署

1.安装anaconda软件 在如下网盘免费获取软件&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1zOZCQOeiDhx6ebHh5zNasA 提取码&#xff1a;hfnd 2.使用conda命令创建python3.8环境 conda create -n whisper python3.83.进入whisper虚拟环境 conda activate whisper4.…

MyBatis的核心技术掌握---分页功能,详细易懂(下)

目录 一.前言 二.MyBatis 的分页 三.MyBatis 的特殊字符处理 一.前言 继上篇MyBatis 的文章&#xff0c;我们继续来学习MyBatis吧&#xff01;&#xff01;&#xff01; 上篇的博客链接&#xff1a; http://t.csdn.cn/5iUEDhttp://t.csdn.cn/5iUED 接下来进…

什么是梯度下降

什么是梯度下降 根据已有数据的分布来预测可能的新数据&#xff0c;这是回归 希望有一条线将数据分割成不同类别&#xff0c;这是分类 无论回归还是分类&#xff0c;我们的目的都是让搭建好的模型尽可能的模拟已有的数据 除了模型的结构&#xff0c;决定模型能否模拟成功的关键…

电商项目part05 分布式ID服务实战

背景 日常开发中&#xff0c;需要对系统中的各种数据使用 ID 唯一表示&#xff0c;比如用户 ID 对应且仅对应一个人&#xff0c;商品 ID 对应且仅对应一件商品&#xff0c;订单 ID 对应且仅对应 一个订单。现实生活中也有各种 ID&#xff0c;比如身份证 ID 对应且仅对应一个人…

XL74HC165 Parallel-2-Serail Controller

XL74HC165 Parallel-2-Serail Controller (SOP16) ( SN74LS165, CD74LS165 - DIP16 / SOP16 ) ( 不频繁存取, 可以考虑 I2C I/O Expender ) PCF8574/ T module (8bits Address *0x40~0x4E* ) PCF8574A module (8bit address *0x70~0x7E* )XL74HC165 fmax : VCC 3.3V &l…

冠达管理股票分析:首家!券商放大招,立马拉升

A股的“回购潮”&#xff0c;开始蔓延至券商行业。 广东研山私募证券投资&#xff08;百度搜索冠达管理)基金管理有限公司成立于2022年&#xff0c;是一家专注于私募基金管理的公司。8月23日盘后&#xff0c;国金证券发布公告称&#xff0c;收到控股股东长沙涌金&#xff08;集…