【Java】面试题37:序列化二叉树
2019-03-25 14:52
316 查看
题目描述:
请实现两个函数,分别用来序列化和反序列化二叉树。
分析:
如图:
题目实际上就是用序列来表示一棵二叉树,然后还可以根据这个序列重建二叉树。对于上图中的树,以前序遍历为例,先访问到1,然后2,然后4,4的左右子结点都为空,可以用一个特殊字符替代,所以上图中的二叉树前序遍历表示就是“1,2,4,替代,所以上图中的二叉树前序遍历表示就是“1,2,4,替代,所以上图中的二叉树前序遍历表示就是“1,2,4,,,,,,3,5,,,,,6,,,,”。
重建的时候,访问的第一个结点为根结点,接下来的数字是2,它是根结点的左子结点。接下来的是4,它是2的左子结点。然后遇到两个,说明4的左右子结点都是NULL。接下来结点回退,访问4的父结点2,又是,说明4的左右子结点都是NULL。接下来结点回退,访问4的父结点2,又是,说明4的左右子结点都是NULL。接下来结点回退,访问4的父结点2,又是,说明2的右子结点是NULL。再返回到根结点,这时候该建立它的右子结点了,下一个数值是3,说明3是根结点的右子结点,剩下的步骤和左子树部分类似。
package jianZhiOffer; /* * 面试题37:序列化二叉树 * 请实现两个函数,分别用来序列化和反序列化二叉树 */ public class Demo37 { public static void main(String[] args) { ListNode root = new ListNode(1); root.left = new ListNode(2); root.left.left = new ListNode(4); root.right = new ListNode(3); root.right.left = new ListNode(5); root.right.right = new ListNode(6); String s = Serialize(root); System.out.println(s); Deserialize(s); } static StringBuilder sb = null; static Strin 2cb1a g Serialize(ListNode root) { //序列化 if(root==null) return "#"; sb = new StringBuilder(); Serialize_solve(root); String s = sb.toString(); return s.substring(0,s.length()-1); } private static void Serialize_solve(ListNode root) { if(root==null) { sb.append("#,"); return ; } sb.append(root.val+","); Serialize_solve(root.left); Serialize_solve(root.right); } static int index; static ListNode Deserialize(String str) { //反序列化 if(str==null || str.trim().equals("")) //去掉字符串两端多余的空格 return null; String[] strs = str.split(","); index=0; return Deserialize_solve(strs); } private static ListNode Deserialize_solve(String[] chars) { if(chars[index].equals("#")) { index++; return null; } System.out.print(chars[index]+" "); ListNode node = new ListNode(Integer.parseInt(chars[index++])); node.left = Deserialize_solve(chars); node.right = Deserialize_solve(chars); return node; } }
相关文章推荐
- 【剑指offer】面试题37:序列化二叉树
- java面试题(剑指offer):序列化二叉树
- 剑指offer面试题63 序列化二叉树(java实现)
- 面试题37:序列化二叉树
- 面试题37:序列化二叉树和反序列化二叉树
- [面试题]序列化/反序列化二叉树
- 【剑指Offer】面试题62:序列化二叉树
- 《剑指offer》面试题62 序列化二叉树
- 剑指Offer面试题23(Java版):从上往下打印二叉树
- JAVA二叉树的遍历和序列化
- 剑指offer——面试题62:序列化二叉树
- 剑指Offer面试题39(Java版):二叉树的深度
- Java中二叉树面试题
- 剑指offer 面试题25 二叉树中和为某一值的路径-Java实现
- 面试题:Java中对象序列化接口(Serializable)的意义
- 数据结构与算法分析笔记与总结(java实现)--二叉树4:二叉树的序列化和反序列化练习题
- java面试题:如何求二叉树中节点的最大距离+层序遍历
- 《剑指Offer》学习笔记--面试题62:序列化二叉树
- 剑指offer——面试题62:序列化二叉树
- 剑指offer面试题23:从上往下打印二叉树 Java实现