From 1fecd0a70aef1a653e1d47b0605170b48cabb540 Mon Sep 17 00:00:00 2001
From: Yucheng Hu
Date: Sun, 16 Dec 2018 14:10:23 -0500
Subject: [PATCH] =?UTF-8?q?=E4=BA=8C=E5=8F=89=E6=A0=91=E7=9A=84=E5=BA=8F?=
=?UTF-8?q?=E5=88=97=E5=8C=96=E5=92=8C=E5=8F=8D=E5=BA=8F=E5=88=97=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ossez/lang/tutorial/models/TreeNode.java | 16 +++
.../LintCode0007SerializeAndDeserialize.java | 131 ++++++++++++++++++
2 files changed, 147 insertions(+)
create mode 100644 src/main/java/com/ossez/lang/tutorial/models/TreeNode.java
create mode 100644 src/test/java/com/ossez/lang/tutorial/tests/lintcode/LintCode0007SerializeAndDeserialize.java
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();
+ }
+
+}