diff --git a/src/main/java/com/ossez/lang/tutorial/models/TreeNode.java b/src/main/java/com/ossez/lang/tutorial/models/TreeNode.java new file mode 100644 index 0000000000..8051f395f4 --- /dev/null +++ b/src/main/java/com/ossez/lang/tutorial/models/TreeNode.java @@ -0,0 +1,16 @@ +package com.ossez.lang.tutorial.models; + +/** + * + * @author YuCheng + * + */ +public class TreeNode { + public int val; + public TreeNode left, right; + + public TreeNode(int val) { + this.val = val; + this.left = this.right = null; + } +} diff --git a/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0007SerializeAndDeserialize.java b/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0007SerializeAndDeserialize.java new file mode 100644 index 0000000000..7783e4254f --- /dev/null +++ b/src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0007SerializeAndDeserialize.java @@ -0,0 +1,131 @@ +package com.ossez.lang.tutorial.tests.lintcode; + +import java.util.ArrayList; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.ossez.lang.tutorial.models.TreeNode; + +/** + *

+ * 7 + *

+ *

+ * + * @author YuCheng + * + */ +public class LintCode0007SerializeAndDeserialize { + + private final static Logger logger = LoggerFactory.getLogger(LintCode0007SerializeAndDeserialize.class); + + /** + * + */ + @Test + public void testMain() { + logger.debug("BEGIN"); + String data = "{3,9,20,#,#,15,7}"; + + System.out.println(serialize(deserialize(data))); + + } + + /** + * Deserialize from array to tree + * + * @param data + * @return + */ + private TreeNode deserialize(String data) { + // NULL CHECK + if (data.equals("{}")) { + return null; + } + + ArrayList treeList = new ArrayList(); + + data = data.replace("{", ""); + data = data.replace("}", ""); + String[] vals = data.split(","); + + // INSERT ROOT + TreeNode root = new TreeNode(Integer.parseInt(vals[0])); + treeList.add(root); + + int index = 0; + boolean isLeftChild = true; + for (int i = 1; i < vals.length; i++) { + if (!vals[i].equals("#")) { + TreeNode node = new TreeNode(Integer.parseInt(vals[i])); + if (isLeftChild) { + treeList.get(index).left = node; + } else { + treeList.get(index).right = node; + } + treeList.add(node); + } + + // LEVEL + if (!isLeftChild) { + index++; + } + + // MOVE TO RIGHT OR NEXT LEVEL + isLeftChild = !isLeftChild; + } + + return root; + + } + + /** + * + * @param root + * @return + */ + public String serialize(TreeNode root) { + // write your code here + if (root == null) { + return "{}"; + } + + ArrayList queue = new ArrayList(); + queue.add(root); + + for (int i = 0; i < queue.size(); i++) { + TreeNode node = queue.get(i); + if (node == null) { + continue; + } + queue.add(node.left); + queue.add(node.right); + } + + while (queue.get(queue.size() - 1) == null) { + queue.remove(queue.size() - 1); + } + + StringBuilder sb = new StringBuilder(); + sb.append("{"); + sb.append(queue.get(0).val); + for (int i = 1; i < queue.size(); i++) { + if (queue.get(i) == null) { + sb.append(",#"); + } else { + sb.append(","); + sb.append(queue.get(i).val); + } + } + sb.append("}"); + return sb.toString(); + } + +}