Advertisement
1988coder

426. Convert Binary Search Tree to Sorted Doubly Linked List

Feb 10th, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.18 KB | None | 0 0
  1.  
  2. // LeetCode URL: https://leetcode.com/problems/convert-binary-search-tree-to-sorted-doubly-linked-list/
  3. import java.util.Stack;
  4.  
  5. // Definition for a Node.
  6. class Node {
  7.     public int val;
  8.     public Node left;
  9.     public Node right;
  10.  
  11.     public Node() {
  12.     }
  13.  
  14.     public Node(int _val, Node _left, Node _right) {
  15.         val = _val;
  16.         left = _left;
  17.         right = _right;
  18.     }
  19. }
  20.  
  21. /**
  22.  * Inorder (Recursion)
  23.  *
  24.  * Time Complexity: O(N)
  25.  *
  26.  * Space Complexity: O(Height of Tree) = O(N) in worst case. (Recursion Stack)
  27.  *
  28.  * N = Number of nodes in the tree.
  29.  */
  30. class Solution1 {
  31.     public Node treeToDoublyList(Node root) {
  32.         if (root == null) {
  33.             return null;
  34.         }
  35.  
  36.         Node dummy = new Node();
  37.         Node[] prev = new Node[1];
  38.         prev[0] = dummy;
  39.         inorderHelper(root, prev);
  40.         prev[0].right = dummy.right;
  41.         dummy.right.left = prev[0];
  42.         return dummy.right;
  43.     }
  44.  
  45.     private void inorderHelper(Node node, Node[] prev) {
  46.         if (node == null) {
  47.             return;
  48.         }
  49.  
  50.         inorderHelper(node.left, prev);
  51.  
  52.         prev[0].right = node;
  53.         node.left = prev[0];
  54.         prev[0] = node;
  55.  
  56.         inorderHelper(node.right, prev);
  57.     }
  58. }
  59.  
  60. /**
  61.  * Inorder (Iterative using stack)
  62.  *
  63.  * Time Complexity: O(N)
  64.  *
  65.  * Space Complexity: O(Height of Tree) = O(N) in worst case. (Stack size)
  66.  *
  67.  * N = Number of nodes in the tree.
  68.  */
  69. class Solution2 {
  70.     public Node treeToDoublyList(Node root) {
  71.         if (root == null) {
  72.             return null;
  73.         }
  74.  
  75.         Stack<Node> stack = new Stack<>();
  76.         Node dummy = new Node();
  77.         Node prev = dummy;
  78.         Node cur = root;
  79.  
  80.         while (!stack.isEmpty() || cur != null) {
  81.             if (cur != null) {
  82.                 stack.push(cur);
  83.                 cur = cur.left;
  84.             } else {
  85.                 Node temp = stack.pop();
  86.                 prev.right = temp;
  87.                 temp.left = prev;
  88.                 prev = temp;
  89.                 cur = temp.right;
  90.             }
  91.         }
  92.  
  93.         prev.right = dummy.right;
  94.         dummy.right.left = prev;
  95.         return dummy.right;
  96.     }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement