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

    你可能感兴趣的文章
    PHP生成及获取JSON文件的方法
    查看>>
    PHP生成唯一不重复的编号
    查看>>
    PHP生成器-动态生成内容的数组
    查看>>
    PHP的ip2long和long2ip升级函数
    查看>>
    PHP的json_encode函数应用到微信接口问题(include \uxxxx will create fail)
    查看>>
    php的web路径获取
    查看>>
    php的一些小笔记--字符串
    查看>>
    php的几种运行模式CLI、CGI、FastCGI、mod_php
    查看>>
    php的四大特性八大优势
    查看>>
    RabbitMQ
    查看>>
    PHP的威胁函数与PHP代码审计实战
    查看>>
    PHP的引用举例
    查看>>
    PHP相关代码
    查看>>
    RabbitMQ
    查看>>
    php知识点记录
    查看>>
    PHP类数组式访问(ArrayAccess接口)
    查看>>
    PHP系列:浅谈PHP中isset()和empty() 函数的区别
    查看>>
    PHP索引数组unset的坑-array_values解决方案
    查看>>
    PHP索引数组排序方法整理(冒泡、选择、插入、快速)
    查看>>
    PHP线程安全和非线程安全
    查看>>