剑指offer(64):序列化二叉树
2016-05-01 16:23
741 查看
题目描述
请实现两个函数,分别用来序列化和反序列化二叉树。
分析
如果二叉树的序列化是从根节点开始,那么对应的而反序列化也是从根节点开始的。因此可以使用二叉树的前序遍历来序列化二叉树,当前序遍历碰到null值是,使用“#”表示,每一个节点的数值之间用“,”隔开。
牛客AC:
参考
1. 何海涛,剑指offer名企面试官精讲典型编程题(纪念版),电子工业出版社
请实现两个函数,分别用来序列化和反序列化二叉树。
分析
如果二叉树的序列化是从根节点开始,那么对应的而反序列化也是从根节点开始的。因此可以使用二叉树的前序遍历来序列化二叉树,当前序遍历碰到null值是,使用“#”表示,每一个节点的数值之间用“,”隔开。
牛客AC:
/* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public int index = -1; // 节点在序列中的索引 /** * 序列化 * 前序遍历,将二叉树节点的值转为字符序列,null转为“#” * * @param root * @return */ String Serialize(TreeNode root) { StringBuffer s = new StringBuffer(); if (root == null) { s.append("#,"); return s.toString(); } s.append(root.val + ","); s.append(Serialize(root.left)); s.append(Serialize(root.right)); return s.toString(); } /** * 反序列化 * * @param str * @return */ TreeNode Deserialize(String str) { index++; int length = str.length(); if (index >= length) { return null; } String[] nodeSeq = str.split(","); TreeNode pNode = null; if (!nodeSeq[index].equals("#")) { pNode = new TreeNode(Integer.valueOf(nodeSeq[index])); pNode.left = Deserialize(str); pNode.right = Deserialize(str); } return pNode; } }
参考
1. 何海涛,剑指offer名企面试官精讲典型编程题(纪念版),电子工业出版社
相关文章推荐
- 第 29 章 CSS3 弹性伸缩布局[下]
- 剑指offer(63):多行打印二叉树
- Cloudera Manager 5和CDH5离线安装
- Javascript 数组方法 some和filter
- jquery的事件与应用
- 第 29 章 CSS3 弹性伸缩布局[中]
- React之PropTypes
- CSS3学习笔记
- 《剑指offer》01 赋值运算符函数
- 第 29 章 CSS3 弹性伸缩布局[上]
- HTML学习小结
- 关于 JavaScript 如何去掉字符串中标签的方法
- jstl中<c:forEach>的用法
- 唱吧-利用HTML5漏洞免费导出MV
- 深入浅出Nodejs
- JavaScript的对象属性的两种访问方式
- 不同js异步函数同步
- 利用referer请求头防止“盗链”
- leetcode——117——Populating Next Right Pointers in Each Node II
- (Caffe)卷积的实现