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神的还是评论里面的解释都已经挺好的了。

相关推荐
holly就是我31 分钟前
AI 编程助手为什么跑偏?用开源 ccglass 看清 Prompt、工具调用和 Token 消耗
人工智能·后端
鸿蒙开发32 分钟前
共享 Schema 与 SchemaFactory
前端·后端·harmonyos
用户7884773163432 分钟前
小程序后端三选一:云开发、.NET WebAPI、Node,我按客户现状分了三种答案
后端
aiopencode33 分钟前
局域网设备抓包怎么做?用 TraceEagle 抓电视、游戏机和 IoT 流量
后端·ios
智驭未来掌门人37 分钟前
CLion 开发 Qt 项目的优势
后端
EnCi Zheng1 小时前
后端怎么把AI接口稳定安全低成本接进业务:超时重试、密钥隔离与成本熔断清单
人工智能·后端·安全·架构·api
Bazingga1 小时前
从一家酒店讲懂Docker
后端
南归北隐1 小时前
Spring AI Alibaba Graph框架实现MCP数据库查询实战
java·后端·spring ai·mcp·spring ai mcp
IT_陈寒1 小时前
刚解决一个 Java 并发问题,这坑踩得我怀疑人生
前端·人工智能·后端
小兔子2 小时前
Unix domain socket 的四个边界:抽象地址没有权限,SO_PEERCRED 是快照
后端