[leetcode]Serialize and Deserialize Binary Tree
来源:互联网 发布:北bi数据分析 编辑:程序博客网 时间:2024/06/03 18:45
Problem Link
序列化和反序列化一棵二叉树。序列化的定义是,能把树结构转化成string。但序列化就是能根据string转化成二叉树。举个栗子:
1
/ \
2 3
/ \
4 5
最简单的姿势,就是把它当成满二叉树处理,对于空节点就用特殊字符代替(用null代替有四个字符呢),比方说我们用
先序遍历
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Codec { int index = -1; // Encodes a tree to a single string. public String serialize(TreeNode root) { StringBuffer strbuf = new StringBuffer(); if(root == null){ strbuf.append("$,"); return strbuf.toString(); } strbuf.append(root.val + ","); strbuf.append(serialize(root.left)); strbuf.append(serialize(root.right)); return strbuf.toString(); } public TreeNode Deserialize(String[] str) { index++; int len = str.length; if (index > len) return null; TreeNode node = null; if(!str[index].equals("$")){ node = new TreeNode(Integer.valueOf(str[index])); node.left = Deserialize(str); node.right = Deserialize(str); } return node; } // Decodes your encoded data to tree. public TreeNode deserialize(String data) { String[] str = data.split(","); index = -1; return Deserialize(str); }}// Your Codec object will be instantiated and called as such:// Codec codec = new Codec();// codec.deserialize(codec.serialize(root));
这种方法的缺点很明显,就是当树中空结点数量多的时候,序列中会有大量的$,浪费。
前序遍历+中序遍历
唔。。就想想优化,不想写代码。懒。。这个要遍历两次,但序列的长度在树比较稀疏的时候,会缩短
相类似的想法是,在遍历的时候,标记一下当前这个结点是左子树还是右子树
0 0
- 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
- 深度行研:危机四伏的传统健身馆,如何杀出一条血路
- Rtabmap build errors
- 利用FormData异步提交content-type为jpg,等流方面信息 --2016.04.20
- Mysql读写分离配置
- 对一个链表的插入排序
- [leetcode]Serialize and Deserialize Binary Tree
- git基本使用
- 一组数据中只有一个数字出现了一次。 其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
- Netty UDP demo
- JavaScript中类似java常量constants使用方法
- 国内常用的Android镜像下载地址(附教育网主要镜像站)
- 总结c++类的构造函数 拷贝构造函数 析构函数 赋值运算符重载的特点以及函数调用顺序
- matlab 定时器
- 微信小程序 websocket