LCR 155 将二叉树转化为排序的双向循环链表

一开始连题目都没怎么看懂,为什么一个已排序的双向循环链表还是二叉树啊。后面看了题解后就差不多懂了,反正就是把二叉搜索树变成从根节点往下数的时候是顺序的。那么怎么遍历该搜索二叉树顺序就对了呢?中序遍历就好了

题目

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

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

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

示例 1:

ini 复制代码
输入: root = [4,2,5,1,3] 


输出: [1,2,3,4,5]

解释: 下图显示了转化后的二叉搜索树,实线表示后继关系,虚线表示前驱关系。

代码与解析

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, head;
    public Node treeToDoublyList(Node root) {
        if(root == null)    return root;
        dfs(root);
        head.left = pre;
        pre.right = head;
        return head;
    }
    public void dfs(Node cur) {
        if(cur == null) return;
        dfs(cur.left);

        if(pre == null) head = cur;
        else pre.right = cur;
        cur.left = pre;
        pre = cur;
        dfs(cur.right);
    }

}

以上代码我就不配注释了,我觉得题解里面的无论是k神的还是评论里面的解释都已经挺好的了。

相关推荐
XXOOXRT2 小时前
基于SpringBoot的加法计算器
java·spring boot·后端·html5
moxiaoran57533 小时前
Go语言的错误处理
开发语言·后端·golang
短剑重铸之日9 小时前
《7天学会Redis》特别篇: Redis分布式锁
java·redis·分布式·后端·缓存·redission·看门狗机制
小北方城市网9 小时前
SpringBoot 全局异常处理与接口规范实战:打造健壮可维护接口
java·spring boot·redis·后端·python·spring·缓存
hanqunfeng10 小时前
(三十三)Redisson 实战
java·spring boot·后端
小北方城市网10 小时前
SpringBoot 集成 MyBatis-Plus 实战(高效 CRUD 与复杂查询):简化数据库操作
java·数据库·人工智能·spring boot·后端·安全·mybatis
hanqunfeng12 小时前
(四十)SpringBoot 集成 Redis
spring boot·redis·后端
小北方城市网12 小时前
SpringBoot 集成 MinIO 实战(对象存储):实现高效文件管理
java·spring boot·redis·分布式·后端·python·缓存
程序员泠零澪回家种桔子12 小时前
RAG自查询:让AI精准检索的秘密武器
人工智能·后端·算法
曹轲恒13 小时前
SpringBoot配置文件(1)
java·spring boot·后端