java剑指 Offer 36. 二叉搜索树与双向链表

Posted 青春无敌美少

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java剑指 Offer 36. 二叉搜索树与双向链表相关的知识,希望对你有一定的参考价值。

问题描述

剑指 Offer 36. 二叉搜索树与双向链表


题目分析:

我们分析后发现,要转换的链表是按中序遍历的顺序来的,因此我们先将二叉搜索树的中序遍历为递增序列 。在将其转换为双向链表是,构建相邻节点的引用关系时,设前驱节点 pre 和当前节点 cur ,不仅应构建 pre.right = cur ,也应构建 cur.left = pre 。循环链表: 设链表头节点 head 和尾节点 tail ,则应构建 head.left = tail 和 tail.right = head 。
在分析时,我们要注意在dfs(root.left)时,注意分类pre是否为null。


代码实现:

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


以上是关于java剑指 Offer 36. 二叉搜索树与双向链表的主要内容,如果未能解决你的问题,请参考以下文章

java剑指 Offer 36. 二叉搜索树与双向链表

剑指 Offer 36. 二叉搜索树与双向链表(二叉搜索树,中序遍历,Java)

LeetCode(剑指 Offer)- 36. 二叉搜索树与双向链表

剑指 Offer 36. 二叉搜索树与双向链表

精选力扣500题 第63题 剑指 Offer 36. 二叉搜索树与双向链表c++/java详细题解

剑指Offer 36二叉搜索树与双向链表