博客
关于我
剑指 Offer 36 二叉搜索树与双向链表
阅读量:324 次
发布时间:2019-03-03

本文共 1171 字,大约阅读时间需要 3 分钟。

将二叉搜索树转换为循环双向链表

问题描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。目标是通过就地操作完成转换,使树中的节点左指针指向前驱节点,右指针指向后继节点,并返回链表的第一个节点指针。

转换过程:

  • 初始检查: 如果输入的根节点为空,直接返回空节点。
  • 深度优先遍历: 使用递归的深度优先搜索遍历树,维护一个前驱指针。
  • 初始化头节点: 遍历过程中,当遇到第一个节点时,设置为链表的头节点。
  • 建立双向链表: 在返回时,调整节点的左指针和右指针,使其指向前驱和后继节点,形成一个循环链表。
  • 返回头节点: 最终返回链表的第一个节点指针。
  • 代码逻辑:

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

    返回值:函数treeToDoublyList返回链表的第一个节点指针,即排序后的循环双向链表的头节点。

    转载地址:http://bkbq.baihongyu.com/

    你可能感兴趣的文章
    OpenCV(1)读写图像
    查看>>
    OpenCV:不规则形状区域中每种颜色的像素数?
    查看>>
    OpenCV:概念、历史、应用场景示例、核心模块、安装配置
    查看>>
    OpenDaylight融合OpenStack架构分析
    查看>>
    OpenERP ORM 对象方法列表
    查看>>
    openEuler Summit 2022 成功举行,开启全场景创新新时代
    查看>>
    openEuler 正式开放:推动计算多样化时代的到来
    查看>>
    OpenEuler23.03欧拉系统_安装瀚高数据库企业版6.0.4_openeuler切换root用户_su:拒绝权限_passwd: 鉴定令牌操作错误---国产瀚高数据库工作笔记001
    查看>>
    OpenEuler23.03欧拉系统_安装瀚高数据库企业版6.0.4_踩坑_安装以后系统无法联网_启动ens33网卡---国产瀚高数据库工作笔记002
    查看>>
    OpenFeign源码学习
    查看>>
    OpenFeign组件声明式服务调用
    查看>>
    openfire源码解读之将cache和session对象移入redis以提升性能
    查看>>
    Openfire身份认证绕过漏洞复现+利用(CVE-2023-32315)
    查看>>
    opengl 深度详解,多重采样时,如何在OpenGL纹理中解析深度值?
    查看>>
    OpenGL 的内置矩阵种种
    查看>>
    OpenGL中shader读取实现
    查看>>
    OpenGL的基本概念介绍
    查看>>
    OpenGL着色器、纹理开发案例
    查看>>
    opengl绘制几何体的函数
    查看>>
    openGL缓存概念和缓存清除(01)
    查看>>