Serialize and Deserialize Binary Tree — BFS Level Order

Sanjeev SharmaSanjeev Sharma
1 min read

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

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro