热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

技术日志:297.二叉树的编码与解码(BinaryTreeSerializationandDeserialization)

本文由编程笔记#小编为大家整理,主要介绍了297. 二叉树的序列化与反序列化(Serialize and Deserialize Binary Tree)相关的知识,希望对你有一定的参考价值。题目描述
本文由编程笔记#小编为大家整理,主要介绍了297. 二叉树的序列化与反序列化(Serialize and Deserialize Binary Tree)相关的知识,希望对你有一定的参考价值。

题目描述:

序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。

请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。

示例: 

你可以将以下二叉树:

1
/
2 3
/
4 5

序列化为 "[1,2,3,null,null,4,5]"

解题思路:

  这道题的方法很多,我使用的是先序遍历,并且用‘,’分割不同结点。如果遇到空结点就用null的首字母‘n’表示。解码时先解析字符串到一个数组中,然后同样先序遍历的顺序重新构建二叉树。

  代码如下:

/**
* 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.
void en_dfs(TreeNode* p, string& res) {
if (!p) {
res.append(
"n,");
return ;
}
res.append(to_string(p
->val)).append(",");
en_dfs(p
->left, res);
en_dfs(p
->right, res);
}
string serialize(TreeNode* root) {
string res;
en_dfs(root, res);
return res;
}
// Decodes your encoded data to tree.
void de_dfs(TreeNode*& p, int& i, vector<int>& number) {
if (number[i] == numeric_limits<int>::max()) {
p
= nullptr;
return ;
}
p
= new TreeNode(number[i]);
de_dfs(p
->left, ++i, number);
de_dfs(p
->right, ++i, number);
}
TreeNode
* deserialize(string data) {
TreeNode
* root = nullptr;
vector
<int> number;
int i = 0;
while (i != data.size()) {
int j = data.find(,, i);
string s = data.substr(i, j - i);
if (s == "n")
number.push_back(numeric_limits
<int>::max());
else
number.push_back(stoi(s));
i
= j + 1;
}
i
= 0;
de_dfs(root, i, number);
return root;
}
};
// Your Codec object will be instantiated and called as such:
// Codec codec;
// codec.deserialize(codec.serialize(root));

 


推荐阅读
author-avatar
pigone
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有