297. 二叉树的序列化与反序列化:
题目链接 :297. 二叉树的序列化与反序列化
题目:
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。
请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。
思路:
1、DFS
(1) 序列化:深度优先遍历:即按每一层的顺序进行根左右的先序遍历。
(2) 反序列化:依然按照每层的顺序,进行根左右的先序构建二叉树。
AC代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Codec {
// Encodes a tree to a single string.
public String serialize(TreeNode root) {
if(root==null)
{
return "null";
}
return root.val+","+serialize(root.left)+","+serialize(root.right);
}
public TreeNode deserialize(String data) {
Queue<String> qe = new LinkedList<>(Arrays.asList(data.split(",")));
return dfs(qe);
}
// Decodes your encoded data to tree.
private TreeNode dfs(Queue<String> queue) {
String val = queue.poll();
if("null".equals(val)){
return null;
}
TreeNode root = new TreeNode(Integer.parseInt(val));
root.left = dfs(queue);
root.right = dfs(queue);
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));