WAP二叉树序列化和反序列化
2016-10-22 14:51
344 查看
Serialize and deserilize a binary Tree
WAP 线上面试题 livecodingDesign an algorithm to serialize and deserialize a binary tree, in which the tree can be serialized to a list of Integer and this list can be deserilized to the original tree structure.
并不是leetcode原题,是层序遍历。
一般的是序列化为String,如果是序列化为String,就需要在 node之间插入’!’ 表示结束。
然后’#’表示null。
但本题是list,思想类似,不过处理null有点麻烦.
live coding的时候紧张lol, 面试官都给tips,序列化和反序列化都是层序化,反序列化注意root要先存到queue,按顺序赋给left 和right即可。
代码如下:
package worksExam; import java.util.*; class TreeNode{ int val; TreeNode left; TreeNode right; public TreeNode(int val){ this.val=val; } } public class Main { public List<Integer> serialize(TreeNode root){ List<Integer> list=new ArrayList<Integer>(); if(root==null) return list; LinkedList<TreeNode> queue=new LinkedList<TreeNode>(); queue.add(root); while(queue.isEmpty()==false){ TreeNode treeNode=queue.peek(); queue.remove(); /** -1 表示该节点是null! * 如果是表示null,加入null到list, * 下面就不要执行了,直接continue到下一次remove。 * 否则就会进入死循环,所以后面不会有的就continue! * */ if(treeNode.val!=-1){ list.add(treeNode.val); }else{ list.add(null); continue; } if(treeNode.left!=null){ queue.add(treeNode.left); } else{ queue.add(new TreeNode(-1)); } if(treeNode.right!=null){ queue.add(treeNode.right); } else{ queue.add(new TreeNode(-1)); } } return list; } public TreeNode deserialize(List<Integer> data){ if(data.size()<1||data==null) return null; //root LinkedList<TreeNode> queue=new LinkedList<TreeNode>(); TreeNode root=new TreeNode(data.get(0)); int index=0; queue.add(root); TreeNode node=null; while(!queue.isEmpty()){ node=queue.remove(); if(data.get(++index)!=null) node.left=new TreeNode(data.get(index)); if(data.get(++index)!=null) node.right=new TreeNode(data.get(index)); if(node.left!=null){ queue.add(node.left); } if(node.right!=null){ queue.add(node.right); } } return root; } }
相关文章推荐
- [面试题]序列化/反序列化二叉树
- 剑指offer——序列化,反序列化二叉树(好题)
- 二叉树基础之序列化和反序列化二叉树
- 算法编程题2-二叉树的序列化和反序列化
- LintCode-----7.二叉树的序列化和反序列化
- leetcode 297. Serialize and Deserialize Binary Tree 二叉树的序列化和反序列化 + 深度优先遍历DFS
- 剑指offer-二叉树的序列化和反序列化(困惑)-Java
- 二叉树序列化与反序列化 (非递归)
- LeetCode 297. Serialize and Deserialize Binary Tree(二叉树的序列化和反序列化)
- 二叉树的序列化和反序列化(C++) (leetcode)
- lintcode : 二叉树的序列化和反序列化
- 【二叉树】二叉树序列化和反序列化
- leetcode297:二叉树的序列化和反序列化(Serialize and Deserialize Binary Tree)
- 请实现两个函数,分别用来序列化和反序列化二叉树
- 二叉树的序列化和反序列化
- 二叉树的序列化和反序列化
- 44.序列化二叉树,反序列化二叉树
- 序列化和反序列化二叉树(java版)
- 二叉树的序列化和反序列化
- Lintcode---二叉树的序列化和反序列化