LeetCode—剑指Offer:二叉搜索树与双向链表(中序遍历)

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

2020年9月2日

题目来源:力扣

在这里插入图片描述
在这里插入图片描述

解题

看案例,是要我们找到二叉搜索树从小到大的节点链表,这个时候就能想到中序遍历(LDR)取出的节点就是从小到大的顺序。
那么自然的我们就能构造一个链表了,但是我们还需要考虑链表是双向的,那么需要在递归中每次都复制当前节点去跟全局的节点创建关系。
最后不要忘记把第一个节点跟最后一个节点建立双向关系。

/*
// Definition for a Node.
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;
    }
};
*/
class Solution {
    
    
    Node tmp_res=new Node();
    Node res=tmp_res;
    public Node treeToDoublyList(Node root) {
    
    
        if(root==null) return null;
        //中序遍历拿到节点
        recur(root);
        //初始化结果res
        res=res.right;
        //第一个节点和最后一个节点建立关系
        res.left=tmp_res;
        tmp_res.right=res;
        return res;
    }
    private void recur(Node root){
    
    
        if(root==null) return;
        recur(root.left);
        //复制当前节点
        Node tmp_root=new Node(root.val);
        //与结果节点建立联系
        tmp_res.right=tmp_root;
        tmp_root.left=tmp_res;
        //结果节点往右移动一步
        tmp_res=tmp_res.right;
        recur(root.right);
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41541562/article/details/108369150
今日推荐