TypechoJoeTheme

Toasobi的博客

二叉搜索树与双向链表(中等)

本文最后更新于2023年03月22日,已超过546天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

这道题当时没做出来,其实是已经想到了使用中序遍历(中序遍历得到的结果就是链表的顺序)。但是不知道如何进行链表节点之间的连接。后面也思考到了每个子树的最右节点下一个连接的是根节点,这个其实就是中序遍历的思维

后面看了题解知道了,可以设置两个全局变量,一个head,一个pre。head用于记录最后返回的结果(头节点),pre用于记录每次递归遍历到的节点的前一个节点,用于两点间连接。最后还要将首位相连(head.left = pre; pre.right = head;)此题得解

代码如下:

<div>class Solution {
    Node head, pre;
    public Node treeToDoublyList(Node root) {
        if(root==null) return null;
        dfs(root);
        head.left = pre;
        pre.right = head;
        return head;
    }
    public void dfs(Node root){
        if(root==null) return;
        dfs(root.left);
        if(pre==null){
            head = root;
            pre = head;
        }else{
            pre.right = root;
            root.left = pre;
            pre = root;
        } 
        dfs(root.right);
    }

}</div>
朗读
赞(0)
评论 (0)