449. Serialize and Deserialize BST
来源:互联网 发布:郑州大学软件学院2017 编辑:程序博客网 时间:2024/06/09 14:24
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.
这里先用stack进行preorder遍历,用“,”分隔node.val组成string,这是encode。对于decode,先分隔出所有的substring,用queue存下node.val,根据BST的性质,可以知道第一个数是root,向后遍历后面所有比他小的数在左子树,之后的数在右子树,递归构造整个数。代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Codec { // Encodes a tree to a single string. public String serialize(TreeNode root) { if (root == null) { return "null"; } StringBuilder builder = new StringBuilder(); Stack<TreeNode> stack = new Stack<TreeNode>(); stack.push(root); while (!stack.isEmpty()) { root = stack.pop(); builder.append(root.val).append(','); if (root.right != null) stack.push(root.right); if (root.left != null) stack.push(root.left); } System.out.print(stack); return builder.toString(); } // Decodes your encoded data to tree. public TreeNode deserialize(String data) { if (data.equals("null")) { return null; } Queue<Integer> queue = new LinkedList<Integer>(); String[] strs= data.split(","); for (String str: strs) { queue.offer(Integer.parseInt(str)); } return getNode(queue); } private TreeNode getNode(Queue<Integer> queue) { if (queue.isEmpty()) { return null; } TreeNode root = new TreeNode(queue.poll()); Queue<Integer> smallerNodes = new LinkedList<Integer>(); while (!queue.isEmpty() && queue.peek() < root.val) { smallerNodes.offer(queue.poll()); } root.left = getNode(smallerNodes); root.right = getNode(queue); return root; }}// Your Codec object will be instantiated and called as such:// Codec codec = new Codec();// codec.deserialize(codec.serialize(root));
- 449. Serialize and Deserialize BST**
- 449. Serialize and Deserialize BST
- 449. Serialize and Deserialize BST
- 449. Serialize and Deserialize BST
- 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
- [LeetCode]Serialize and Deserialize BST
- leetcode_middle_32_449. Serialize and Deserialize BST
- Serialize and Deserialize Binary Tree & Serialize and Deserialize BST
- [leetcode] 449. Serialize and Deserialize BST 解题报告
- 蓝桥-ALGO-12-幂方分解
- Spring--AOP
- 上传高分资源,低分下载
- [21]DOM操作表格及样式
- [22]DOM元素尺寸和位置
- 449. Serialize and Deserialize BST
- Android SharedPreferences数据存储原理解析及使用示例
- ubuntu启动过程
- seoer的日常工作是什么
- 响应式网站的好处
- 网站内页参与排名的一些技巧
- word 操作类实现拆分word
- aspose.words 操作word生成试卷
- word 操作类实现拆分word