/**
* 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.
* <p>
* 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.
* <p>
* 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.
* <p>
* <p>
* Example 1:
* <p>
* <p>
* Input: root = [1,2,3,null,null,4,5]
* Output: [1,2,3,null,null,4,5]
* <p>
* <p>
* Example 2:
* <p>
* <p>
* Input: root = []
* Output: []
* <p>
* <p>
* <p>
* Constraints:
* <p>
* <p>
* The number of nodes in the tree is in the range [0, 10⁴].
* -1000 <= Node.val <= 1000
* <p>
* Related Topics树 | 深度优先搜索 | 广度优先搜索 | 设计 | 字符串 | 二叉树
* <p>
* 👍 985, 👎 0
*/
//leetcode submit region begin(Prohibit modification and deletion)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Codec {
public String serialize(TreeNode root) {
return rserialize(root, "");
}
public TreeNode deserialize(String data) {
String[] dataArray = data.split(",");
List<String> dataList = new LinkedList<String>(Arrays.asList(dataArray));
return rdeserialize(dataList);
}
public String rserialize(TreeNode root, String str) {
if (root == null) {
str += "null,";
} else {
str += str.valueOf(root.val) + ",";
str = rserialize(root.left, str);
str = rserialize(root.right, str);
}
return str;
}
public TreeNode rdeserialize(List<String> dataList) {
if (dataList.get(0).equals("null")) {
dataList.remove(0);
return null;
}
TreeNode root = new TreeNode(Integer.valueOf(dataList.get(0)));
dataList.remove(0);
root.left = rdeserialize(dataList);
root.right = rdeserialize(dataList);
return root;
}
}
// Your Codec object will be instantiated and called as such:
// Codec ser = new Codec();
// Codec deser = new Codec();
// TreeNode ans = deser.deserialize(ser.serialize(root));
//leetcode submit region end(Prohibit modification and deletion)