博客
关于我
剑指 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/

    你可能感兴趣的文章
    pandas :将行取消堆叠到新列中
    查看>>
    pandas DataFrame 中的自定义浮点格式
    查看>>
    Pandas DataFrame 的 describe()方法详解-ChatGPT4o作答
    查看>>
    Pandas DataFrame中删除列级的方法链接解决方案
    查看>>
    Pandas DataFrame中的列从浮点数输出到货币(负值)
    查看>>
    Pandas DataFrame中的列从浮点数输出到货币(负值)
    查看>>
    Pandas DataFrame多索引透视表-删除空头和轴行
    查看>>
    pandas DataFrame的一些操作
    查看>>
    Pandas Dataframe的日志文件
    查看>>
    Pandas df.iterrows() 并行化
    查看>>
    pandas GROUPBY+变换和多列
    查看>>
    pandas Groupby:创建两列的Groupby时,如何按正确的顺序对工作日进行排序?
    查看>>
    Pandas matplotlib 无法显示中文
    查看>>
    pandas PIVOT_TABLE保持索引
    查看>>
    Pandas Plots:周末的单独颜色,x 轴上漂亮的打印时间
    查看>>
    pandas to_latex() 转义数学模式
    查看>>
    Pandas 中文官档 ~ 基础用法4
    查看>>
    Pandas 中的多索引旋转
    查看>>
    Pandas 中的日期范围
    查看>>
    pandas 中的时间序列箱线图
    查看>>