public class Codec {
private static final String NULL = "null";
private static final String SPLT = " ";
// BFS saves nodes level by level
public String serialize(TreeNode root) {
if (root == null)
return "";
StringBuilder sb = new StringBuilder();
sb.append(root.val + SPLT);
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
if (node.left == null) {
sb.append(NULL + SPLT);
} else {
queue.offer(node.left);
sb.append(node.left.val + SPLT);
}
if (node.right == null) {
sb.append(NULL + SPLT);
} else {
queue.offer(node.right);
sb.append(node.right.val + SPLT);
}
}
return sb.toString();
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
if (data.length() == 0)
return null;
String[] nodes = data.split(SPLT);
// Create the root
TreeNode root = new TreeNode(Integer.valueOf(nodes[0]));
// Save root node into the queue
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
int index = 1;
while (!queue.isEmpty()) {
Queue<TreeNode> nextQueue = new LinkedList<>();
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
// Create the left child
if (nodes[index].equals(NULL)) {
node.left = null;
} else {
node.left = new TreeNode(Integer.valueOf(nodes[index]));
nextQueue.offer(node.left);
}
index++;
// Create the right child
if (nodes[index].equals(NULL)) {
node.right = null;
} else {
node.right = new TreeNode(Integer.valueOf(nodes[index]));
nextQueue.offer(node.right);
}
index++;
}
// Update the queue
queue = nextQueue;
}
return root;
}
}
Leetcode 297. Serialize and Deserialize Binary Tree
最新推荐文章于 2022-12-04 16:41:55 发布