剑指 Offer 36. 二叉搜索树与双向链表--------python && C++源代码

简介: 剑指 Offer 36. 二叉搜索树与双向链表--------python && C++源代码

剑指 Offer 36. 二叉搜索树与双向链表


难度中等504收藏分享切换为英文接收动态反馈


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


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


image.png


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


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


image.png


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


题目思路:

力扣


借用一下K神的图 一看图解决一切问题 ,本来想自己写题解,后来发现人家的图画的太好了 直接转载一下:


image.png


Python代码:

class Solution:
    def treeToDoublyList(self, root: 'Node') -> 'Node':
        def dfs(cur):
            if not cur: return
            dfs(cur.left)
            if self.pre: self.pre.right , cur.left = cur , self.pre
            else: self.head = cur
            self.pre = cur
            dfs(cur.right)
        if not root: return 
        self.pre = None
        dfs(root)
        self.head.left , self.pre.right = self.pre , self.head
        return self.head

C++代码:

class Solution {
public:
    Node* treeToDoublyList(Node* root) {
        if (root==nullptr) return nullptr;
        dfs(root);
        head->left = pre;
        pre->right = head;
        return head;
    }
private:
    Node *head , *pre;
    void dfs(Node *cur){
        if(cur==nullptr) return ;
        dfs(cur->left);
        if(pre!=nullptr) {
相关文章
|
4月前
|
移动开发 Python Windows
python编程获取网页标题title的几种方法及效果对比(源代码)
python编程获取网页标题title的几种方法及效果对比(源代码)
|
5月前
|
算法框架/工具 C++ Python
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
383 0
|
2月前
|
测试技术 开发者 Python
使用Python解析和分析源代码
本文介绍了如何使用Python的`ast`模块解析和分析Python源代码,包括安装准备、解析源代码、分析抽象语法树(AST)等步骤,展示了通过自定义`NodeVisitor`类遍历AST并提取信息的方法,为代码质量提升和自动化工具开发提供基础。
59 8
|
3月前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
python知识点100篇系列(15)-加密python源代码为pyd文件
|
3月前
|
C++ Python
探索Python与C/C++混合编程的艺术
探索Python与C/C++混合编程的艺术
58 1
|
4月前
|
人工智能 算法 图形学
总有一个是你想要的分享40个Python游戏源代码
这是一系列基于Python开发的游戏项目集合,包括中国象棋、麻将、足球、坦克大战、扑克等多种类型游戏,运用了Pygame等库实现图形界面与AI算法。此外还包含迷宫、数独、推箱子等益智游戏及经典游戏如《仙剑奇侠传二战棋版》和《星露谷物语》的Python版本,适合编程学习与娱乐。
214 11
WK
|
4月前
|
机器学习/深度学习 Java 程序员
为什么Python比C++慢很多?
Python相较于C++较慢主要体现在:动态类型系统导致运行时需解析类型,增加开销;作为解释型语言,逐行转换字节码的过程延长了执行时间;自动内存管理和垃圾回收机制虽简化操作但也带来了额外负担;全局解释器锁(GIL)限制了多线程性能;尽管Python库方便灵活,但在性能上往往不及C++底层库。然而,Python在某些领域如数据分析、机器学习中,凭借其高级别抽象和简洁语法仍表现出色。选语言需依据具体应用场景和需求综合考量。
WK
108 1
|
4月前
|
关系型数据库 MySQL API
Python管理系统源代码
本文介绍了多种基于Python和相关技术的管理系统源代码,包括学生信息管理、图书管理、ERP、异常管理、考试系统等。提供了64个源代码供下载,适用于不同场景和个人项目需求。下载链接:https://pan.baidu.com/s/1hXPLbKHMpBDhlFVv1kdMxA?pwd=8888,提取码:8888。欢迎使用和支持。
106 3
|
5月前
|
Unix C语言 C++
Python调用C/C++
Python调用C/C++
38 2
|
5月前
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
28 3