dengxinyi 6 年之前
父節點
當前提交
a52c77a498
共有 2 個文件被更改,包括 101 次插入0 次删除
  1. 43 0
      medium/430.flatten-a-multilevel-doubly-linked-list.java
  2. 58 0
      medium/449.serialize-and-deserialize-bst.java

+ 43 - 0
medium/430.flatten-a-multilevel-doubly-linked-list.java

@@ -0,0 +1,43 @@
+/*
+// Definition for a Node.
+class Node {
+    public int val;
+    public Node prev;
+    public Node next;
+    public Node child;
+
+    public Node() {}
+
+    public Node(int _val,Node _prev,Node _next,Node _child) {
+        val = _val;
+        prev = _prev;
+        next = _next;
+        child = _child;
+    }
+};
+*/
+class Solution {
+    public Node flatten(Node head) {
+        recurse(head);
+        return head;
+    }
+
+    private Node recurse(Node node) {
+        Node prev = node;
+        while (node != null) {
+            if (node.child == null) {
+                prev = node;
+                node = node.next;
+            } else {
+                prev = recurse(node.child);
+                prev.next = node.next; // Double linked list, both next and prev should be modified!
+                if (prev.next != null) prev.next.prev = prev;
+                node.next = node.child;
+                node.child.prev = node;
+                node.child = null;
+                node = prev.next;
+            }
+        }
+        return prev; // Return the last node of flatten list.
+    }
+}

+ 58 - 0
medium/449.serialize-and-deserialize-bst.java

@@ -0,0 +1,58 @@
+/**
+ * Definition for a binary tree node.
+ * public class TreeNode {
+ *     int val;
+ *     TreeNode left;
+ *     TreeNode right;
+ *     TreeNode(int x) { val = x; }
+ * }
+ */
+public class Codec {
+
+    // Encodes a tree to a single string.
+    public String serialize(TreeNode root) {
+        if (root == null) return "nil";
+        StringBuilder sb = new StringBuilder();
+        sb.append(Integer.toString(root.val));
+        LinkedList<TreeNode> list = new LinkedList<>();
+        list.add(root.left);
+        list.add(root.right);
+        while (list.size() != 0) {
+            TreeNode node = list.poll();
+            if (node == null) {
+                sb.append(",nil");
+            } else {
+                sb.append(',');
+                sb.append(Integer.toString(node.val));
+                list.add(node.left);
+                list.add(node.right);
+            }
+        }
+        return sb.toString();
+    }
+
+    // Decodes your encoded data to tree.
+    public TreeNode deserialize(String data) {
+        if (data.equals("nil")) return null;
+        String[] strs = data.split(",");
+        TreeNode root = new TreeNode(Integer.parseInt(strs[0]));
+        LinkedList<TreeNode> list = new LinkedList<>();
+        list.add(root);
+        for (int i = 1; i < strs.length; i++) {
+            TreeNode node = list.poll();
+            if (!strs[i].equals("nil")) {
+                node.left = new TreeNode(Integer.parseInt(strs[i]));
+                list.add(node.left);
+            }
+            if (!strs[++i].equals("nil")) {
+                node.right = new TreeNode(Integer.parseInt(strs[i]));
+                list.add(node.right);
+            }
+        }
+        return root;
+    }
+}
+
+// Your Codec object will be instantiated and called as such:
+// Codec codec = new Codec();
+// codec.deserialize(codec.serialize(root));