LintCode——7. 二叉树的序列化和反序列化
2018-01-28 15:25
330 查看
描述:
设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。
如何反序列化或序列化二叉树是没有限制的,你只需要确保可以将二叉树序列化为一个字符串,并且可以将字符串反序列化为原来的树结构。
样例:
给出一个测试数据样例, 二叉树{3,9,20,#,#,15,7},表示如下的树结构:
3
/ \
9 20
/ \
15 7我们的数据是进行BFS遍历得到的。当你测试结果wrong answer时,你可以作为输入调试你的代码。
你可以采用其他的方法进行序列化和反序列化。
实现代码如下:
package lintcode; import ds.TreeNode; import java.util.ArrayDeque; import java.util.Deque; /** * Class Name : SerializeBT_7 * Describe : empty * Create User : yoo * Create Date : 2018/1/27 * Create Time : 19:05 **/ public class SerializeBT_7 { public static String serialize(TreeNode root) { StringBuilder sb = new StringBuilder(); if (root == null) return null; Deque<TreeNode> nodeDeque = new ArrayDeque<TreeNode>(); nodeDeque.add(root); sb.append(root.val); while (!nodeDeque.isEmpty()) { TreeNode p = nodeDeque.pop(); if (p.left != null) { nodeDeque.add(p.left); sb.append("," + p.left.val); } else { sb.append(",#"); } if (p.right != null) { nodeDeque.add(p.right); sb.append("," + p.right.val); } else { sb.append(",#"); } } String results = sb.toString(); while (results.endsWith(",#,#")) results = results.substring(0, results.length() - 4); return "{" + results + "}"; } public static TreeNode deserialize(String data) { if (data == null || data.trim().length() < 2) return null; data = data.substring(1, data.length() - 1); String[] datas = data.split(","); Deque<TreeNode> nodeDeque = new ArrayDeque<TreeNode>(); TreeNode root = new TreeNode(Integer.valueOf(datas[0])); nodeDeque.add(root); int i = 1; while (i < datas.length) { TreeNode node = nodeDeque.pop(); if (!datas[i].equals("#")) { node.left = new TreeNode(Integer.valueOf(datas[i])); nodeDeque.add(node.left); } else { node.left = null; } i++; if (!(i < datas.length)) break; if (!datas[i].equals("#")) { node.right = new TreeNode(Integer.valueOf(datas[i])); nodeDeque.add(node.right); } else { node.right = null; } i++; } return root; } }
相关文章推荐
- linecode7. 二叉树的序列化和反序列化已AC
- [算法]二叉树的序列化、反序列化
- 使用层序遍历序列化和反序列化二叉树
- 二叉树的序列化和反序列化,二叉树深度、广度优先遍历
- 二叉树的序列化和反序列化
- (lintcode)第7题二叉树的序列化和反序列化
- 【剑指offer】题61:二叉树序列化、反序列化
- leetcode 297. Serialize and Deserialize Binary Tree 二叉树的序列化和反序列化 + 深度优先遍历DFS
- 二叉树的序列化和反序列化实现(C++)
- LintCode 二叉树的序列化和反序列化 题解
- 序列化以及反序列化二叉树
- 请实现两个函数,分别用来序列化和反序列化二叉树
- 剑指offer:二叉树的序列化和反序列化
- LintCode 7-二叉树的序列化和反序列化
- 二叉树序列化和反序列化
- LintCode 7 二叉树的序列化和反序列化
- 二叉树的序列化和反序列化
- 剑指offer——序列化,反序列化二叉树(好题)
- 二叉树问题---二叉树的序列化和反序列化
- 二叉树的序列化和反序列化