Serialize and Deserialize BST
来源:互联网 发布:fluent软件官方下载 编辑:程序博客网 时间:2024/06/05 22:45
Serialize and Deserialize BST
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.
解析:按先序遍历二叉树把每个节点地值存放在字符串中,解码时按对应的方式解码,由于要把数字存入字符串,每个数字之间使用分隔符。
在写的时候遇到很多问题,开始解码的函数使用的参数是(string s,int &pos)这样的形式,pos记录本次解码时s中起始位置,这个每次递归时
都要记录整个s字符串,会遇到内存溢出的问题,后来改进为(string &s),其中每次递归时都对s进行处理,s只记录当前需要的位置。
代码:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Codec {public: // Encodes a tree to a single string. string serialize(TreeNode* root) { if (root==NULL) return "$ "; string ans=to_string(root->val)+" "; ans+=serialize(root->left); ans+=serialize(root->right); return ans; } // Decodes your encoded data to tree. TreeNode* deserialize(string data) { int pos=0; return Derseial(data); } TreeNode* Derseial(string &data) { int pos=0; if (data[pos]=='$') { pos+=2; data=data.substr(pos,data.size()-pos); return NULL; } int endpos=data.size()-1; for (int i=pos; i<data.size(); i++) { if (data[i]==' ') { endpos=i; break; } } int value=atoi(data.substr(pos,endpos-pos).c_str()); TreeNode *root=new TreeNode(value); //pos=endpos; data=data.substr(endpos+1,data.size()-endpos-1); root->left=Derseial(data); root->right=Derseial(data); return root; }};// Your Codec object will be instantiated and called as such:// Codec codec;// codec.deserialize(codec.serialize(root));
- Serialize and Deserialize BST
- [LeetCode]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
- Serialize and Deserialize Binary Tree & 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 449. Serialize and Deserialize BST
- POJ 1002 487-3279 G++
- jQuery:load()方法
- Two sum算法
- android.support.design.widget.TabLayout属性讲解
- 在服务器上搭建hexo博客
- Serialize and Deserialize BST
- TSQL生成数据导出SQL
- C++调用有道词典API实现Caesar密码的加密解密
- Java 集合系列01之 总体框架
- android studio中Git的运用总结 基于码云代码托管平台
- linux tar解压、压缩命令详解
- Hibernate映射——多对多关联映射(八)
- 微信公众平台简易设计使用
- 解决IllegalStateException: Can not perform this action after onSaveInstanceState