将二叉树转换成双向链表

2023-11-19

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

因为二叉搜索树每个节点都有两个指针,分别是指向其左子节点和右子节点,所以将该节点的左子节点变成双向链表中的左节点,将该节点的右子节点变成双向链表中的右节点。采用中序列遍历的方法遍历数组,然后利用递归将左边的最后一个节点和根节点相连,将右边的第一个节点和根节点相连。

python代码:

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def Convert(self, pRootOfTree):

        if not pRootOfTree:
            return None
        if not pRootOfTree.left and not pRootOfTree.right:
            return pRootOfTree

        # 将左子树构建成双链表,返回链表头
        left = self.Convert(pRootOfTree.left)
        p = left

        # 定位至左子树的最右的一个结点
        while left and p.right:
            p = p.right

        # 如果左子树不为空,将当前root加到左子树链表
        if left:
            p.right = pRootOfTree
            pRootOfTree.left = p

        # 将右子树构造成双链表࿰
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将二叉树转换成双向链表 的相关文章

  • Django基础1——项目实现流程

    文章目录 一 前提了解 二 准备开发环境 2 1 创建项目 2 1 1 pycharm创建 2 1 2 命令创建 2 2 创建应用 例1 效果实现 例2 网页展示日志文件 一 前提了解 基本了解 官网 Django是Python的一个主流W
  • nginx响应码301及访问路径参数丢失之间的关系

    nginx响应码301及访问路径参数丢失之间的关系 本文比较长 所以写了一篇比较短的结果导向的文章 换了一下思路 大家可以看一这篇文章 如果感兴趣再来看这篇文章 nginx导致vue设置history模式下的请求丢失参数 背景描述 在一次生
  • VUE路由的跳转的4中方式

    vue 路由跳转四种方式 带参数 router link 带参数 不带参数 this router push 函数里面调用 1 2 3 this router replce 用法同上 push this router go n 一 1 ro
  • 一步真实解决TypeError: unlink() got an unexpected keyword argument ‘missing_ok‘

    在谷歌服务器colab上跑yolo代码 训练自己的yolov5模型 遇到这个错误 可把我整不会了 已经做好了数据集 建立了新的data下的yaml和model下的yaml文件 然后使用代码 python train py 运行train p
  • 新仙魔九界研发及设计分析

    玩法本质属于捕鱼RPG玩法 美术风格属于国风 非常有特色 目前整体的玩法 性能优化和体验各方面都做的不错 从第三方数据平台获知该游戏目前月流水在600万 且有未来还有巨大的增长空间 这也不是波克城市第一次做出尝试 早在2015年就尝试过一个
  • druid 解析select查询sql获取表名,字段名,where条件

    解析select sql生成QueryModelInfo param dbTypeName mysql oracle param selectSql return public static QueryModelInfo parse Str
  • Vue将页面中Echarts动态图导出Gif动图

    Vue将页面中Echarts动态图导出Gif动图 首先 准备工作需要三个依赖的js 第一个js采用npm进行安装 npm install html2canvas 第二个js采用下载放入项目中进行使用 下载链接 https pan baidu
  • $refs用法

    refs获取dom元素 今天我们主要说一下几点 1 vue 获取普通元素 基础 2 vue 获取列表 基础 一 vue获取dom节点 普通元素 我们之前获取页面上的dom元素 很容易 比如原生js的 document getElements
  • Angular实现发送请求下载文件

    Angular实现下载文件到本地 第一步 获取下载地址 获取下载地址 download let param 参数 json形式 this download param subscribe res any gt if res success
  • 【无标题】AttributeError: ‘TransposedFont‘ object has no attribute ‘getbbox‘

    Python 运行 Wordcloud的时候出现了这个错误 from wordcloud import WordCloud from PIL import Image import matplotlib pyplot as plt topi
  • 3D游戏编程与设计作业——血条预制

    一 作业要求 血条 Health Bar 的预制设计 具体要求如下 分别使用 IMGUI 和 UGUI 实现 使用 UGUI 血条是游戏对象的一个子元素 任何时候需要面对主摄像机 分析两种实现的优缺点 给出预制的使用方法 二 实现效果 血条
  • ROS自学实践(10):ROS节点同时订阅多个话题并进行消息时间同步

    一 前言 在进行SLAM建图或自动驾驶系统设计的过程中 往往涉及到多种传感器进行环境感知和信息采集 这就不仅需要一个节点接收多个传感器数据 还要求传感器数据的时间戳同步 这样才能实现环境数据的实时感知和处理 本文基于ROS操作系统 从C 和
  • Android 5.x 权限问题解决方法

    0 关于selinux的基础知识 可以参见http www cnblogs com shell812 p 6379321 html TE语言规则 参见http www cnblogs com shell812 p 6379370 html
  • npx报错“Path must be a string. Received undefined”in windows解决方法

    在使用Windows上使用较老版本的nodejs 如何我使用的v8 9其自带的npx的版本为9 7 在Windows上使用会存在 Path must be a string Received undefined 的错误 通过 GitHub
  • QT程序运行时依赖设置

    本文主要解决Qt程序运行时容易遇到的两个问题 找不到相关的Qt6Core dll Qt6Widgets dll等库 这种情况下 把相关DLL所在目录添加到系统的环境变量 PATH 中 就可以了 无法导入Qt相关的插件 qt qpa plug
  • PCL调错:(3)error C2589“(“:“::“右边的非法标记

    错误提示 造成该错误的原因是 pcl库中的函数模板max与Visual C 中的全局的宏max冲突 百度了以下看了一共有两种解决方案 第一种不用修改库里边的源代码 设置项目属性 在预定义处理器中添加定义NOMINMAX来禁止使用Visual
  • Android 旧项目引入 (kotlin)插件简单记录

    1 确认自己 AS 的kotlin 插件 已经安装 2 选择kotlin plugin updates 文件显示 3 选择configure kotlin in project 进入选择 Android gradle 的选项 由于我这边配置
  • JAVA中数组冒泡排序和选择排序

    冒泡排序的思想 两两之间比较大小 小的数在前 大的数在后 共比较i 1次 static void MaoPaoArray int a for int i 0 i lt a length 2 i for int j 0 j lt a leng
  • tortoisegit 常见错误disconnected no supported authentication methods available(server sent: publickey)

    本文转载自 https blog csdn net yym6789 article details 53807640 1 安装好小乌龟git后 用小乌龟的pull 从github上拉取项目 遇到错误 disconnected no supp
  • 7 整数反转 c++

    leetcode7 整数反转 题目描述 给出一个 32 位的有符号整数 你需要将这个整数中每位上的数字进行反转 注意 如果反转后整数溢出那么就返回 0 算法思路 使用一个64位的long long类型来存储结果整数 避免反转后结果溢出报错

随机推荐

  • C++ 装饰器模式

    什么是装饰器模式 装饰器模式是一种结构型设计模式 实现了在不改变现有对象结构的的同时又拓展了新的功能 装饰器本质上是对现有对象的重新包装 同时装饰器又称为封装器 如何理解装饰器模式 以笔记本电脑为例 当我们购买了一台新笔记本电脑 但我们发现
  • 在openwrt使用C语言增加ubus接口(包含C uci操作)

    在openwrt使用C语言增加ubus接口 包含C uci操作 文章目录 在openwrt使用C语言增加ubus接口 包含C uci操作 创建自己的软件包 软件包结构 编写代码和启动脚本 重点 案例大致分析 实现过程 ubus demo i
  • java调用脚本语言笔记(jython,jruby,groovy)

    java调用脚本语言笔记 jython jruby groovy 有两种方法 1 java se 6以后实现了jsr 223规范 java代码 java view plain copy ScriptEngineManager factory
  • C语言:深度解析各种数据在计算机内存中的存储

    文章目录 数据的各种类型的存储 各种数据类型的意义是什么 整形在计算机内存中的存储 原码反码补码 为什么数据的存放都是补码 什么是大小端 整形提升 什么是整型提升 那么整型提升是做什么的 如何进行整形提升 关于整型提升的例子 关于整形数据存
  • c++编写COM组件,并使用该组件

    在网上看了很多个介绍com组件的方法 对于一个新手来说看很久都看不懂 自己项目需要实现com 于是自己整理了一个文档和代码 先记录下来 以防以后用的上 步骤如下 1 新建ATL项目 你也可以是其他项目 只要是dll就行 可以支持MFC AT
  • [Excel VBA]如何拷贝数组?

    本文翻译至 http itpro nikkeibp co jp atcl column 15 090100207 090100143 ST system Variant型变量 数组 数组是可以保存多个值的 一种变量 变量是独幢楼房的话 数组
  • 详解java设计模式之-----观察者模式

    观察者模式 对象间的联动 什么是观察者模式呢 首先 看一个故事 红灯停 绿灯行 在日常生活中 交通信号灯装点着我们的城市 指挥着日益拥挤的城市交 通 当红灯亮起 来往的汽车将停止 而绿灯亮起 汽车可以继续前行 在这个过程中 交 通信号灯是汽
  • 串行接口的工作原理和实现

    串口的结构和工作原理 通用异步收发传输器 Universal Asynchronous Receiver Transmitter 通常称作UART 它将要传输的资料在串行通信与并行通信之间加以转换 作为把并行输入信号转成串行输出信号的芯片
  • postman接口测试的关联测试

    在接口测试中 很多时候需要依赖前一个请求的响应数据关联到后一个请求的请求数据中来 在postman的中有一个Pre request Script 板块 如示例接口为 https api weixin qq com cgi bin user
  • Java面向对象基础

    文章目录 面向对象 一 类和对象 1 类的介绍 2 类和对象的关系 3 类的组成 4 创建对象和使用对象的格式 二 对象内存图 1 单个对象内存图 2 两个对象内存图 3 两个引用指向相同内存图 三 成员变量和局部变量 四 this 关键字
  • 栈(Stack)——class Stack 和 class Stack T 实现

    对于Stack类的实现 跟之前链表实现也一样 只是封装成为面向对象的类了 PS 这里是线式存储的类和模板实现 链表式的实际上写法也是一样的 class Stack代码如下 mystack h include
  • 信奥一本通 贪心算法 回顾

    文章目录 写在前面 A 家庭作业 B 智力大冲浪 C 加工生产调度 D 喷水装置3 线段覆盖最少线段 E 活动安排 线段覆盖 覆盖最多段 F 种树 G 数列极差 H 数列分段 I 钓鱼 J 均分纸牌 K 糖果传递 写在前面 之前看到一篇非常
  • java中的双端队列deque使用以及部分原理

    转载自 https www cnblogs com denglh p 7911513 html package collections import java util Deque import java util LinkedList P
  • 对于金融机构而言,为什么选择私有化 IM 比企业微信、钉钉更好?

    一 金融机构数字化转型迈向规范有序 更成体系的新阶段 当前 新一轮信息技术革命浪潮拉开序幕 以人工智能 大数据 云计算等为代表的数字技术正在重构全球经济 不少企业也纷纷拥抱数字化浪潮 开展全方位的变革和升级 中国银保监会印发 关于银行业保险
  • char字符表

    图片来源于网上
  • 如何在 GitHub 上找到免费且实用的软件?

    GitHub 虽说是以程序员为主的社区 但是上面托管的项目类型却风格迥异 有认真科研型的 也有上班划水型的 有面向极客宅男的开发工具 也有给小白麻瓜使用的普通软件 本周写了几篇文章 大多都在介绍与技术相关的开发工具与技巧 今天稍微调整一下
  • 生成csv文件并下载

    在做项目中 我们做一个功能的时候 可能要把数据做导出或下载处理 下载成各种格式 下面提供了一种excel下载格式 csv 将得到的数据 经过处理生成csv文件 并激活下载到本地 代码如下
  • 云计算目前国内外发展现状是什么,云计算主要存在哪些问题?

    远在 云计算 的名次出现之前 我国相关科技人员便已对互联网的透明资源储备技术进行了多方面应用 而随着科技的不断进步 对于云计算的应用愈加频繁 政府部门对云计算的建设提供了经济基础与社会软环境的保障 并且在国家科研部门当中设立了专业的部门 直
  • Android 获取本地视频列表

    activity video list xml
  • 将二叉树转换成双向链表

    输入一棵二叉搜索树 将该二叉搜索树转换成一个排序的双向链表 要求不能创建任何新的节点 只能调整树中节点指针的指向 因为二叉搜索树每个节点都有两个指针 分别是指向其左子节点和右子节点 所以将该节点的左子节点变成双向链表中的左节点 将该节点的右