[LeetCode] Serialize and Deserialize Binary Tree
来源:互联网 发布:酷友网络 编辑:程序博客网 时间:2024/05/22 00:16
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.
For example, you may serialize the following tree
1 / \ 2 3 / \ 4 5as
"[1,2,3,null,null,4,5]"
, just the same as how LeetCode OJ serializes a binary tree. You do not necessarily need to follow this format, so please be creative and come up with different approaches yourself.Note: Do not use class member/global/static variables to store states. Your serialize and deserialize algorithms should be stateless.
代码如下:
/** * 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 ""; StringBuffer re=new StringBuffer(); ArrayList<TreeNode> level=new ArrayList<TreeNode>(); level.add(root); while(!level.isEmpty()){ ArrayList<TreeNode> newLevel=new ArrayList<TreeNode>(); boolean flag=true; for(int i=0;i<level.size();i++){ TreeNode node=level.get(i); if(node==null) continue; flag=false; newLevel.add(node.left); newLevel.add(node.right); } if(flag) break; for(int i=0;i<level.size();i++){ TreeNode node=level.get(i); if(node!=null) re.append(node.val); else re.append("null"); re.append(","); } level=newLevel; } System.out.println(re); return re.substring(0,re.length()-1); } // Decodes your encoded data to tree. public TreeNode deserialize(String data) { if("".equals(data)) return null; String[] arr=data.split(","); ArrayList<Integer> list=new ArrayList<Integer>(); for(String str:arr){ if("null".equals(str)) list.add(null); else list.add(Integer.parseInt(str)); } if(list.size()==0) return null; Queue<TreeNode> queue=new LinkedList<TreeNode>(); TreeNode root=new TreeNode(list.get(0)); queue.add(root); for(int i=1;i<list.size();i+=2){ TreeNode node=queue.poll(); if(node==null){ i-=2;continue; } node.left=list.get(i)==null?null:new TreeNode(list.get(i)); node.right=list.get(i+1)==null?null:new TreeNode(list.get(i+1)); queue.add(node.left);queue.add(node.right); } return root; }}// Your Codec object will be instantiated and called as such:// Codec codec = new Codec();// codec.deserialize(codec.serialize(root));
- leetcode 297 : Serialize and Deserialize Binary Tree
- LeetCode Serialize and Deserialize Binary Tree
- [LeetCode] Serialize and Deserialize Binary Tree
- [LeetCode]Serialize and Deserialize Binary Tree
- LeetCode -- Serialize and Deserialize Binary Tree
- LeetCode Serialize and Deserialize Binary Tree 树
- [LeetCode 297] Serialize and Deserialize Binary Tree
- LeetCode Serialize and Deserialize Binary Tree
- LeetCode 297 Serialize and Deserialize Binary Tree
- Leetcode: Serialize and Deserialize Binary Tree
- [Leetcode]Serialize and Deserialize Binary Tree
- leetcode之Serialize and Deserialize Binary Tree
- leetcode:Serialize and Deserialize Binary Tree
- [LeetCode]297. Serialize and Deserialize Binary Tree
- LeetCode 297. Serialize and Deserialize Binary Tree
- leetcode 297. Serialize and Deserialize Binary Tree
- LeetCode 297. Serialize and Deserialize Binary Tree
- Serialize and Deserialize Binary Tree -- leetcode
- 关于git的一些零碎知识
- tensorflow 中对数组元素的操作
- Linux系统里虚拟机的完整创建步骤
- 3.装饰者模式
- ARKit国内demo类型大评点!
- [LeetCode] Serialize and Deserialize Binary Tree
- 开机显示无法定位程序输入点于动态链接库?
- Excel数据库连接字符串
- git常用命令
- JavaWeb学习总结(二十三)——jsp自定义标签开发入门
- Caffe源码(三):layer 分析
- svn tree conflict
- html 标签引用外部文件时//的作用
- 2.1 二级指针作输入之数组基础