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;
}
}
心之所向,素履以往 生如逆旅,一苇以航

浙公网安备 33010602011771号