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

将一个 二叉搜索树 就地转化为一个 已排序的双向循环链表 。

对于双向循环列表,你可以将左右孩子指针作为双向循环链表的前驱和后继指针,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。

特别地,我们希望可以 就地 完成转换操作。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继。还需要返回链表中最小元素的指针。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-binary-search-tree-to-sorted-doubly-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {

    private Node[] solve(Node root) {
        if (root == null) {
            return new Node[2];
        }
        Node[] left = solve(root.left);
        Node[] right = solve(root.right);

        Node[] ans = new Node[]{root, root};
        if (left[0] != null) {
            ans[0] = left[0];
            left[1].right = root;
            root.left = left[1];
        }

        if (right[0] != null) {
            ans[1] = right[1];
            root.right = right[0];
            right[0].left = root;
        }

        ans[0].left = ans[1];
        ans[1].right = ans[0];

        return ans;
    }

    public Node treeToDoublyList(Node root) {
        if (root == null) {
            return null;
        }
        return solve(root)[0];
    }
}

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;
    }
}
posted @ 2021-12-27 15:49  Tianyiya  阅读(40)  评论(0)    收藏  举报