Serialize and Deserialize Binary Tree — BFS Level Order
Advertisement
Problem 299 · Serialize and Deserialize Binary Tree
Difficulty: Hard · Pattern: BFS Queue
Solutions
# Python — BFS
from collections import deque
class Codec:
def serialize(self, root):
if not root: return ''
res = []; queue = deque([root])
while queue:
node = queue.popleft()
if node:
res.append(str(node.val))
queue.append(node.left)
queue.append(node.right)
else:
res.append('null')
return ','.join(res)
def deserialize(self, data):
if not data: return None
vals = data.split(',')
root = TreeNode(int(vals[0]))
queue = deque([root]); i = 1
while queue:
node = queue.popleft()
if vals[i] != 'null':
node.left = TreeNode(int(vals[i]))
queue.append(node.left)
i += 1
if vals[i] != 'null':
node.right = TreeNode(int(vals[i]))
queue.append(node.right)
i += 1
return root
// Java
public String serialize(TreeNode root) {
if (root==null) return "";
StringBuilder sb=new StringBuilder(); Queue<TreeNode> q=new LinkedList<>();
q.offer(root);
while (!q.isEmpty()) {
TreeNode node=q.poll();
if (node==null) sb.append("null,");
else { sb.append(node.val).append(','); q.offer(node.left); q.offer(node.right); }
}
return sb.toString();
}
public TreeNode deserialize(String data) {
if (data.isEmpty()) return null;
String[] vals=data.split(","); TreeNode root=new TreeNode(Integer.parseInt(vals[0]));
Queue<TreeNode> q=new LinkedList<>(); q.offer(root); int i=1;
while (!q.isEmpty()) {
TreeNode node=q.poll();
if (!vals[i].equals("null")) { node.left=new TreeNode(Integer.parseInt(vals[i])); q.offer(node.left); } i++;
if (!vals[i].equals("null")) { node.right=new TreeNode(Integer.parseInt(vals[i])); q.offer(node.right); } i++;
}
return root;
}
Complexity
- Time: O(n) both
- Space: O(n) both
Advertisement