剑指 Offer 36. 二叉搜索树与双向链表(java+python)

2023-11-11

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

为了让您更好地理解问题,以下面的二叉搜索树为例:

在这里插入图片描述

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

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

在这里插入图片描述

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

java

/*
// Definition for a Node.
class Node {
    public int val;
    public Node left;
    public Node right;

    public Node() {}

    public Node(int _val) {
        val = _val;
    }

    public Node(int _val,Node _left,Node _right) {
        val = _val;
        left = _left;
        right = _right;
    }
};
*/
class Solution {
    Node pre=null;
    Node head=null;
    public Node treeToDoublyList(Node root) {
        if(root==null)  return null;
        dfs(root);
        head.left=pre;
        pre.right=head;
        return head;
    }
    public void dfs(Node r){
        if (r==null) return;
        dfs(r.left);
        if(pre!=null){
            pre.right=r;
        }
        else{
            head=r;
        }
        r.left=pre;
        pre=r;
        dfs(r.right);
    }
}

python

"""
# Definition for a Node.
class Node(object):
    def __init__(self, val, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
"""
class Solution(object):
    def treeToDoublyList(self, root):
        """
        :type root: Node
        :rtype: Node
        """
        if not root:
            return None
        def dfs(r):
            if not r:
                return
            dfs(r.left)
            if not self.pre:
                self.head=r
            else:
                self.pre.right,r.left=r,self.pre
            self.pre=r
            dfs(r.right)
        self.pre=None
        dfs(root)
        self.pre.right,self.head.left=self.head,self.pre
        return self.head
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

剑指 Offer 36. 二叉搜索树与双向链表(java+python) 的相关文章

  • Java中ArrayList的交集和并集

    有什么方法可以做到这一点吗 我正在寻找 但没有找到 另一个问题 我需要这些方法 以便我可以过滤文件 有些是AND过滤器 有些是OR过滤器 就像集合论中的那样 所以我需要根据所有文件和保存这些文件的联合 相交 ArrayList 进行过滤 我
  • Mockito:如何通过模拟测试我的服务?

    我是模拟测试新手 我想测试我的服务方法CorrectionService correctPerson Long personId 实现尚未编写 但这就是它将执行的操作 CorrectionService将调用一个方法AddressDAO这将
  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会

随机推荐

  • Java中的String的一些常用方法

    家人们好 目录 字符 字节与字符串 字符与字符串 获取指定位置的字符 字符串与字符数组的转换 给定字符串一个字符串 判断其是否全部由数字所组成 字节与字符串 实现字符串与字节数组的转换处理 字符串常见操作 字符串比较 不区分大小写比较 观察
  • 灯光 (1)平行光(Directional Light)

    1 平行光 Directional Light 定义一个光线方向向量而不是位置向量来模拟一个定向光 着色器的计算基本保持不变 但这次我们将直接使用光的direction向量而不是通过position来计算lightDir向量 struct
  • C++类中const修饰的函数与重载

    一 重载的定义 重载声明是指在同一个作用域内 可以声明几个功能类似的同名函数 但是这些同名函数的形式参数 指参数的个数 类型或者顺序 必须不同 返回值的类型不同 不能作为重载函数的判断依据 如下举例一组重载函数 void fun int a
  • FTL 入门

    最近的项目中用的是ftl文件而不是传统的jsp 于是上网查了一下 感觉这是个好东西 于是准备记录下来 以下摘自百度百科 1 概念 FreeMarker是一款模板引擎 即一种基于模板和要改变的数据 并用来生成输出文本 HTML网页 电子邮件
  • AttributeError: ‘function‘ object has no attribute ‘_name_‘

    在运行python的下面代码时 def log func def wrapper args kw print call s func name return func args kw return wrapper log def now p
  • layui table单元格事件修改值

    事件中的 this相当于document getElementById id 替代方法就是将原本 document getElementById id InnerHTML 填充代码 替换成 id html 填充代码
  • 数据结构_队列

    队列类似于日常生活中的排队 它也是一种特殊的线性表 队列和栈有相反的逻辑 但是却属于同类结构 文章目录 队列的介绍 队列的结构 队列的实现 完整代码及测试程序 循环队列 循环队列的介绍 循环队列的实现 完整代码 队列的介绍 定义 队列是一种
  • Truechain运用docker镜像搭建TrueChain测试私有环境

    https github com truechain wiki blob master task list task 20180917 md 安装docker Mac参考https blog csdn net jiang xinxing a
  • 图像边缘检测——一阶微分算子 Roberts、Sobel、Prewitt、Kirsch、Robinson(Matlab实现)

    图像边缘一般指图像的灰度变化率最大的位置 成因主要如下 1 图像灰度在表面法向变化不连续 2 图像中物体在空间上的深度不一致 3 在光滑的表面上颜色不一致 4 图像中物体的光影 边缘检测指的是从图像中检测边缘点和边缘段 并且描述边缘方向的过
  • 无重复字符的最长字串

    1 给定一个字符串 s 请你找出其中不含有重复字符的 最长子串的长度 代码展示 class Solution public int lengthOfLongestSubstring String s int n s length if n
  • PMAC网络USB设置

    一 连接到PMAC 在默认情况下 Power PMAC有一个IP地址为192 168 0 200 没有互联网连接 要安装所需的软件包并获得时间 您的PMAC将需要一个internet连接 为了建立你的网络连接 可以一个u盘上放一个文件夹 P
  • MYSQL数据库基本操作——DDL

    MYSQL DDL 何为DDL 对数据库的常用操作 对表结构的操作 创建表 表的其它操作 修改表结构 何为DDL DDL是数据定义语言 包括对数据库的常用操作 对表结构的常用操作 修改表结构三部分 通俗来讲 就是不包括对表内数据进行操作的所
  • 解救开发人员写文档的痛苦

    开发人员的痛苦 接手前人的项目 没有接口文档 只能看代码学习 接口文档用txt word markdown写 编写特别麻烦 写出来的文档也不美观 多层级的参数 子参数 写起来麻烦 不知道怎么表达更好 有的文档需要图文并茂 需要代码示例 需要
  • Shiro免密登录

    Shiro免密登录 代码构成 代码构成 1 创建枚举类LoginType 登录类型 public enum LoginType PASSWORD password 密码登录 NOPASSWD nopassword 免密登录 private
  • 计算机专业的浪漫情话,计算机专业表白情话 污到流水文章

    次日早起 江笑还没有到学校 就收到了顾言兮的一条短信 陈昊轩回来了 在餐厅遇到 依然众星捧月 江笑皱了一下眉 要不是这条短信 她竟然都差一点忘了还有陈昊轩这个人了 众星捧月 也能想象 陌家成了那样 陌雪是不可能在栓得住陈昊轩了 那其他对于陈
  • 游戏开发unity xlua框架知识系列:C#如何调用lua

    参看xlua框架的LuaDLL cs文件后 才知道其实lua仍然是用c写的源代码编译成不同平台的库 然后通过unity的DLLImport方法来使用的
  • 学习SQL注入基础板块---准备工作以及踩的坑

    准备 下载phpStudy 建议下载2018版本的 因为新版本让我这个菜渣折腾挺多天 下载sqli labs GitHub下载 之后将其放在安装好的phpstudy的WWW目录下 下载HackBar插件 GitHub下载2 1 3版本的 不
  • 四十岁以上的程序员都去干啥了?

    编译丨Linsa 在美国 工作者的年龄中位数是42岁 而Stack Overflow 2016年的程序员调查中 程序员的平均年龄是29 6岁 中位数为27岁 40岁以上的程序员只占总数的12 7 2016年Stack Overflow程序员
  • 方格填数(2016年蓝桥杯)

    如图 如下的10个格子 填入0 9的数字 要求 连续的两个数字不能相邻 左右 上下 对角都算相邻 一共有多少种可能的填数方案 请填写表示方案数目的整数 看到这题第一个想到的方法就是回溯 就很像八皇后 能填进去就填 填不进去就看下一个位置 我
  • 剑指 Offer 36. 二叉搜索树与双向链表(java+python)

    输入一棵二叉搜索树 将该二叉搜索树转换成一个排序的循环双向链表 要求不能创建任何新的节点 只能调整树中节点指针的指向 为了让您更好地理解问题 以下面的二叉搜索树为例 我们希望将这个二叉搜索树转化为双向循环链表 链表中的每个节点都有一个前驱和