Skip to content

Commit 3e95cdc

Browse files
committed
IsomorphicStrings: done
1 parent d52dbe7 commit 3e95cdc

File tree

2 files changed

+192
-1
lines changed

2 files changed

+192
-1
lines changed

src/main/java/com/leetcode/graphs/WordLadder.java

+13-1
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,20 @@ public static int ladderLength(String beginWord, String endWord, List<String> wo
102102
return 0;
103103
}
104104

105+
/**
106+
* TODO: Optimized both end BFS solution
107+
*
108+
* @param beginWord
109+
* @param endWord
110+
* @param wordList
111+
* @return
112+
*/
113+
public static int ladderLengthOptimized(String beginWord, String endWord, List<String> wordList) {
114+
return -1;
115+
}
116+
105117
public static void main(String[] args) {
106118
assertEquals(5, ladderLength("hit", "cog", Arrays.asList("hot", "dot", "dog", "lot", "log", "cog")));
107119
assertEquals(0, ladderLength("hit", "cog", Arrays.asList("hot", "dot", "dog", "lot", "log")));
108120
}
109-
}
121+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
package com.leetcode.trees;
2+
3+
4+
import java.util.LinkedList;
5+
import java.util.Queue;
6+
7+
/**
8+
* Level: Hard
9+
* Link: https://leetcode.com/problems/serialize-and-deserialize-binary-tree/
10+
* Description:
11+
* Serialization is the process of converting a data structure or object into a sequence of bits so that it can be
12+
* stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in
13+
* the same or another computer environment.
14+
*
15+
* Design an algorithm to serialize and deserialize a binary tree. There is no restriction on how your
16+
* serialization/deserialization algorithm should work. You just need to ensure that a binary tree can be serialized
17+
* to a string and this string can be deserialized to the original tree structure.
18+
*
19+
* Example:
20+
*
21+
* You may serialize the following tree:
22+
*
23+
* 1
24+
* / \
25+
* 2 3
26+
* / \
27+
* 4 5
28+
*
29+
* as "[1,2,3,null,null,4,5]"
30+
*
31+
* Clarification: The above format is the same as how LeetCode serializes a binary tree. You do not necessarily need
32+
* to follow this format, so please be creative and come up with different approaches yourself.
33+
*
34+
* Note: Do not use class member/global/static variables to store states. Your serialize and deserialize algorithms
35+
* should be stateless.
36+
*
37+
* @author rampatra
38+
* @since 2019-08-17
39+
*/
40+
public class SerializeDeserializeBinaryTree {
41+
42+
/**
43+
* Runtime: <a href="https://leetcode.com/submissions/detail/252443769/">31 ms</a>.
44+
*
45+
* @param root
46+
* @return
47+
*/
48+
public static String serialize(TreeNode root) {
49+
if (root == null) {
50+
return "[]";
51+
}
52+
53+
StringBuilder sb = new StringBuilder();
54+
sb.append("[");
55+
56+
Queue<TreeNode> queue = new LinkedList<>();
57+
queue.add(root);
58+
59+
while (!queue.isEmpty()) {
60+
TreeNode node = queue.poll();
61+
62+
if (sb.length() > 1) {
63+
sb.append(", ");
64+
}
65+
if (node == null) {
66+
sb.append("null");
67+
continue;
68+
}
69+
70+
sb.append(node.val);
71+
72+
queue.add(node.left);
73+
queue.add(node.right);
74+
}
75+
76+
sb.append("]");
77+
return removeExtraNulls(sb.toString());
78+
}
79+
80+
private static String removeExtraNulls(String data) {
81+
int i = data.length() - 1;
82+
while (!(data.charAt(i) >= 48 && data.charAt(i) <= 57)) {
83+
i--;
84+
}
85+
return data.substring(0, i + 1) + "]";
86+
}
87+
88+
/**
89+
*
90+
* @param data
91+
* @return
92+
*/
93+
public static TreeNode deserialize(String data) {
94+
data = data.substring(1, data.length() - 1);
95+
96+
if (data.length() == 0) {
97+
return null;
98+
}
99+
100+
String[] values = data.split(", ");
101+
102+
TreeNode root = new TreeNode(Integer.parseInt(values[0]));
103+
104+
Queue<TreeNode> queue = new LinkedList<>();
105+
queue.add(root);
106+
107+
for (int i = 0; i < values.length && !queue.isEmpty(); i += 2) {
108+
TreeNode currNode = queue.poll();
109+
110+
if (i + 1 < values.length && !values[i + 1].equals("null")) {
111+
TreeNode leftNode = new TreeNode(Integer.parseInt(values[i + 1]));
112+
currNode.left = leftNode;
113+
queue.add(leftNode);
114+
}
115+
116+
if (i + 2 < values.length && !values[i + 2].equals("null")) {
117+
TreeNode rightNode = new TreeNode(Integer.parseInt(values[i + 2]));
118+
currNode.right = rightNode;
119+
queue.add(rightNode);
120+
}
121+
}
122+
123+
return root;
124+
}
125+
126+
public static void main(String[] args) {
127+
// TODO Convert the print statements to asserts
128+
129+
System.out.println(serialize(new TreeNode(1)));
130+
131+
/*
132+
Binary Tree
133+
134+
1
135+
/ \
136+
2 3
137+
/ \
138+
4 5
139+
*/
140+
TreeNode tree = new TreeNode(1);
141+
tree.left = new TreeNode(2);
142+
tree.right = new TreeNode(3);
143+
tree.left.left = new TreeNode(4);
144+
tree.left.right = new TreeNode(5);
145+
146+
System.out.println(serialize(tree));
147+
148+
System.out.println(serialize(deserialize(serialize(tree))));
149+
150+
System.out.println(serialize(deserialize(serialize(null))));
151+
152+
TreeNode tree2 = new TreeNode(1);
153+
tree2.right = new TreeNode(2);
154+
tree2.right.right = new TreeNode(3);
155+
tree2.right.right.right = new TreeNode(4);
156+
tree2.right.right.right.right = new TreeNode(5);
157+
tree2.right.right.right.right.right = new TreeNode(6);
158+
tree2.right.right.right.right.right.right = new TreeNode(7);
159+
tree2.right.right.right.right.right.right.right = new TreeNode(8);
160+
161+
System.out.println(serialize(tree2));
162+
System.out.println(serialize(deserialize(serialize(tree2))));
163+
164+
System.out.println("---");
165+
166+
System.out.println(serialize(deserialize("[1, 2]")));
167+
System.out.println(serialize(deserialize("[1, 2, 3]")));
168+
System.out.println(serialize(deserialize("[3, 2, 4, 1]")));
169+
System.out.println(serialize(deserialize("[3, 2, 4, 1, 5, 6]")));
170+
System.out.println(serialize(deserialize("[1, 2, 3, null, null, 4, 5]")));
171+
System.out.println(serialize(deserialize("[5, 2, 3, null, null, 2, 4, 3, 1]")));
172+
173+
System.out.println(serialize(deserialize("[1, null, 2, null, 3, null, 4, null, 5]")));
174+
System.out.println(serialize(deserialize("[1, null, 2, null, 3, null, 4, null, 5, null, 6]")));
175+
System.out.println(serialize(deserialize("[1, null, 2, null, 3, null, 4, null, 5, null, 6, null, 7]")));
176+
System.out.println(serialize(deserialize("[1, null, 2, null, 3, null, 4, null, 5, null, 6, null, 7, null, 8]")));
177+
System.out.println(serialize(deserialize("[1, null, 2, null, 3, null, 4, null, 5, null, 6, null, 7, null, 8, null, 9]")));
178+
}
179+
}

0 commit comments

Comments
 (0)