|
@@ -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));
|