Leetcode 449 Serialize and Deserialize BST
来源:互联网 发布:淘宝v3会员是几钻 编辑:程序博客网 时间:2024/06/05 07:51
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 search tree. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that a binary search tree can be serialized to a string and this string can be deserialized to the original tree structure.
The encoded string should be as compact as possible.
Note: Do not use class member/global/static variables to store states. Your serialize and deserialize algorithms should be stateless.
考虑一种二叉树的遍历,比如preorder
那么string应该是 root left right 如果是null 就直接写null
值得注意的是如何恢复 这也是要选先序遍历的原因
前面一个是root 那么后面的比root小的全部是左子树的节点
然后后边比root大的全都是右子树的节点
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Codec { Stack<TreeNode> s = new Stack<>(); // Encodes a tree to a single string. public String serialize(TreeNode root) { if(root == null){ return "null"; } StringBuffer sb = new StringBuffer(); s.push(root); while(!s.isEmpty()){ TreeNode tmp = s.pop(); sb.append(String.valueOf(tmp.val)); sb.append(","); if(tmp.right != null){ s.push(tmp.right); } if(tmp.left != null){ s.push(tmp.left); } } return sb.toString(); } // Decodes your encoded data to tree. public TreeNode deserialize(String data) { if(data.equals("null")) return null; String[] str = data.split(","); Queue<Integer> q = new LinkedList<>(); for(String s : str){ q.offer(Integer.parseInt(s)); } return build(q); } private TreeNode build(Queue<Integer> q) { if (q.isEmpty()) return null; TreeNode root = new TreeNode(q.poll()); Queue<Integer> leftnodes = new LinkedList<>(); while (!q.isEmpty() && q.peek() < root.val) { leftnodes.offer(q.poll()); } root.left = build(leftnodes); root.right = build(q); return root; }}// Your Codec object will be instantiated and called as such:// Codec codec = new Codec();// codec.deserialize(codec.serialize(root));
- Leetcode 449 Serialize and Deserialize BST
- [LeetCode]Serialize and Deserialize BST
- LeetCode 449. Serialize and Deserialize BST
- LeetCode 449. Serialize and Deserialize BST
- LeetCode 449. Serialize and Deserialize BST
- 【LeetCode】 449. Serialize and Deserialize BST
- Leetcode-449. Serialize and Deserialize BST
- [leetcode]449. Serialize and Deserialize BST
- LeetCode 449. Serialize and Deserialize BST
- 【Leetcode】449. Serialize and Deserialize BST
- leetcode 449. Serialize and Deserialize BST
- Serialize and Deserialize BST
- leetcode_middle_32_449. Serialize and Deserialize BST
- 449. Serialize and Deserialize BST**
- 449. Serialize and Deserialize BST
- 449. Serialize and Deserialize BST
- 449. Serialize and Deserialize BST
- [leetcode] 449. Serialize and Deserialize BST 解题报告
- 微信小程序 Node.js (基础七) Stream(流)
- redis面试总结
- linux 的安装与配置
- EJB到底是什么?
- Android app中实现网络监听
- Leetcode 449 Serialize and Deserialize BST
- Android移动端与服务器api接口加密示例(AES,MD5,Token)
- GC知识点
- IoT小能手:家电状态显示及控制系统
- spark--Actions算子--countByKey
- Ubuntu14.04(32位)下Caffe(仅CPU模式)编译
- Maven创建Web项目
- PHP 出现解析json数据出错的问题
- python常用命令