题目:请实现两个函数,分别用来序列化和反序列化二叉树

 
二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。

二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。
 
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
//序列化
void do_Serialize(TreeNode *root, string &s)
{
if(root == nullptr)
{
s += '#';
s += ',';
return;
}
//std::to_string() 数值转换字符串
s += to_string(root->val);
s += ',';
do_Serialize(root->left,s);
do_Serialize(root->right,s);
}
char* Serialize(TreeNode *root)
{
if(root == nullptr)
{
return nullptr;
}
string str = "";
do_Serialize(root,str);
//返回值是char *
char *ret = new char[str.length() + 1]; //'\0'
strcpy(ret, str.c_str());
return ret;
} //反序列化
TreeNode* do_Deserialize(string &s)
{
if(s.empty())
{
return nullptr;
}
if (s[0] == '#')
{
s = s.substr(2); //从s中去掉#,
return nullptr;
}
TreeNode *ret = new TreeNode(stoi(s)); s = s.substr(s.find_first_of(',') + 1); ret->left = do_Deserialize(s);
ret->right = do_Deserialize(s);
return ret;
}
TreeNode* Deserialize(char *str)
{
if(str == nullptr)
{
return nullptr;
}
string s(str);
return do_Deserialize(s);
}
};

  

 

最新文章

  1. C++-数据库【1】-C++连接MSSQL数据库
  2. nginx重启
  3. AngularJS入门心得4——漫谈指令scope
  4. C# .net windows服务启动多个服务 ServiceBase
  5. IOS 导航栏
  6. thinkphp验证码使用
  7. OpenCV(3)-图像resize
  8. 【JS】Intermediate9:jQuery: Other Tricks
  9. VC++中的类的内存分布(上)
  10. 【超酷超实用】CSS3可滑动跳转的分页插件制作教程
  11. 【JAVA零基础入门系列】Day12 Java类的简单应用
  12. Xcode中不用Storyboard,用纯xib创建TabBar模式视图
  13. java 23种设计模式教程
  14. SQL Server 2008更改数据库保存路径
  15. 微信小程序(七)文章详情页面动态显示
  16. python之路--面向对象(三)
  17. Codeforces 985 E - Pencils and Boxes
  18. Oracle 解决【ORA-01704:字符串文字太长】
  19. 010 使用jquery实现小需求练习-------对应选择器的练习
  20. 使用livereload实现自动刷新

热门文章

  1. Visual Studio 2022 MAUI NU1105(NETSDK1005) 处理记录
  2. [机器学习] PCA主成分分析原理分析和Matlab实现方法
  3. [OpenCV实战]7 使用YOLOv3和OpenCV进行基于深度学习的目标检测
  4. angular组件共用服务打印日志父子组件传值2创建服务注入
  5. 都用过@Autowired,但你知道它是怎么实现的吗
  6. 让人眼前一亮的应用「GitHub 热点速览」
  7. HashMap存储自定义类型键值-Linked Hash集合
  8. Python修改柱状图边缘柱子与图边界的距离
  9. C#反射运行该类下的方法
  10. 【学习日志】Cglib动态代理和JDK动态代理的对比