Serialize and Deserialize Binary Tree

Problem Statement:

Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.

Design an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized to the original tree structure.

Clarification: The input/output format is the same as how LeetCode serializes a binary tree. You do not necessarily need to follow this format, so please be creative and come up with different approaches yourself.

Example 1:

Input: root = [1,2,3,null,null,4,5]
Output: [1,2,3,null,null,4,5]

Example 2:
Input: root = []
Output: []

Example 3:
Input: root = [1]
Output: [1]

Example 4:
Input: root = [1,2]
Output: [1,2]

Solution:

This problem could be solved in various different ways: using concepts of DFS (Depth First Search) or BFS (Breadth First Search). But BFS gives a very straight-forward and very easy to understand yet robust solution, as shown in the code below. The code below has huge potential in being extended and reused in solving various other Binary Tree problems if your core solution is based on BFS. Please get a strong grasp of the code implementation below to see how we are using Queue and concept of BFS to solve Binary Tree problem.

The code below is self-explanatory and easy to understand, so I am not adding any more discussion here. If you are new to coding or data structure (Queue) or Graph Algorithms like BFS, then spend some time going over the entire code first, then come back to the above discussion and re-read it, spend some time digging deeper into BFS and Queue, and then get back to the code again but this time dissect every part of it and don't leave till you get the core idea and understand the implementation well. If you already know how BFS works, the implementation should look familiar.