博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Careercup - Facebook面试题 - 5729456584916992
阅读量:5112 次
发布时间:2019-06-13

本文共 2602 字,大约阅读时间需要 8 分钟。

2014-05-02 00:59

原题:

Given a normal binary tree, write a function to serialize the tree into a string representation (returning the string), and also a function to deserialize a serialized string into the original binary tree.

题目:给定一棵二叉树,请设计序列化和反序列化的方法。

解法:我的方法是使用前序遍历来进行序列化,其中大括号"{}"包含了数据序列,用“#”表示空指针。反序列化的思路则相反。

代码:

1 // http://www.careercup.com/question?id=5729456584916992 2 #include 
3 #include
4 #include
5 using namespace std; 6 7 struct TreeNode { 8 int val; 9 TreeNode *left;10 TreeNode *right;11 TreeNode(int _val = 0): val(_val), left(nullptr), right(nullptr) {};12 };13 14 class BinaryTreeSerializer {15 public:16 string serialize(TreeNode *root) {17 string res = "{
";18 19 // preorder traversal20 serializeTraversal(root, res);21 res[res.length() - 1] = '}';22 23 return res;24 };25 26 TreeNode *deserialize(string s) {27 vector
data;28 int i, j, len;29 30 len = (int)s.length();31 i = 1;32 while (true) {33 j = i + 1;34 while (s[j] != ',' && s[j] != '}') {35 ++j;36 }37 data.push_back(s.substr(i, j - i));38 i = j + 1;39 if (i >= len) {40 break;41 }42 }43 44 int iter = 0;45 TreeNode *root = nullptr;46 47 // preorder traversal48 deserializeTraversal(data, root, iter);49 50 return root;51 };52 private:53 static char ss[10];54 55 void serializeTraversal(TreeNode *root, string &res) {56 if (root == nullptr) {57 res += "#,";58 } else {59 sprintf(ss, "%d", root->val);60 res += string(ss);61 res.push_back(',');62 serializeTraversal(root->left, res);63 serializeTraversal(root->right, res);64 }65 };66 67 void deserializeTraversal(vector
&data, TreeNode *&root, int &iter) {68 ++iter;69 if (data[iter - 1] == "#") {70 root = nullptr;71 } else {72 int val;73 74 sscanf(data[iter - 1].c_str(), "%d", &val);75 root = new TreeNode(val);76 deserializeTraversal(data, root->left, iter);77 deserializeTraversal(data, root->right, iter);78 }79 };80 };

 

转载于:https://www.cnblogs.com/zhuli19901106/p/3703577.html

你可能感兴趣的文章
ZH奶酪:PHP 执行时间Fatal error: Maximum execution time of...
查看>>
GCD与block
查看>>
多线程
查看>>
文件夹的判断与创建
查看>>
树莓派研究笔记(8)-- 编译lakka v2.1源码
查看>>
能说明你的Javascript技术很烂的五个原因
查看>>
C# .Net计算函数执行的时间
查看>>
CF 546C Soldier and Cards
查看>>
volatile和lock的使用场景
查看>>
宿舍助手app——个人工作第七天
查看>>
epoll示例
查看>>
[译]课程 11: 高级 (企业级) 特性
查看>>
两头大象的启示
查看>>
CSS实现隐藏滚动条同时又可以滚动
查看>>
Sql 2005数据库的sa密码忘记了怎么办?
查看>>
[转载] 字节单位换算
查看>>
顿悟了
查看>>
CTF-练习平台-Misc之 这么多数据包
查看>>
简易的不科学立直麻将学习笔记(1)-进攻策略-门清编-简单的两面听向做牌指南...
查看>>
Magento请求分发与控制器(二)
查看>>