LCR 155. 将二叉搜索树转化为排序的双向链表

LCR 155. 将二叉搜索树转化为排序的双向链表_第1张图片

LCR 155. 将二叉搜索树转化为排序的双向链表_第2张图片

LCR 155. 将二叉搜索树转化为排序的双向链表_第3张图片

解题思路:

中序遍历法(二叉搜索树在中序遍历时是从小到大排列的)。

// 打印中序遍历
void dfs(Node root) {
    if(root == null) return;
    dfs(root.left); // 左
    System.out.println(root.val); // 根
    dfs(root.right); // 右
}

采用head作为返回,使用pre和cur两个指针。

LCR 155. 将二叉搜索树转化为排序的双向链表_第4张图片

LCR 155. 将二叉搜索树转化为排序的双向链表_第5张图片

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;
    }
    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);
    }
}

你可能感兴趣的:(链表,数据结构,leetcode,算法,java,深度优先)