剑指 Offer 37. 序列化二叉树
Posted Billy Miracle
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer 37. 序列化二叉树相关的知识,希望对你有一定的参考价值。
菜鸡思考:
这道题其实并没有那么的可怕,我们看,它只是让我们把树序列成字符串,再还原。我们可以选择自己喜欢的方式,下面我将给出DFS的方法,碰到null节点则序列化成#
,所有节点用逗号分割。
菜鸡代码:
/**
* 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:
void rserialize(TreeNode* root, string& s)
if (root == NULL)
s += "#,";
else
s += to_string(root->val) + ',';
rserialize(root->left, s);
rserialize(root->right, s);
// Encodes a tree to a single string.
string serialize(TreeNode* root)
string ans;
rserialize(root, ans);
return ans;
TreeNode* rdeserialize(queue<string>& q)
if (q.front() == "#")
q.pop();
return NULL;
TreeNode* root = new TreeNode(stoi(q.front()));
q.pop();
root->left = rdeserialize(q);
root->right = rdeserialize(q);
return root;
// Decodes your encoded data to tree.
TreeNode* deserialize(string data)
queue<string> myQueue;
string s;
for (char c : data)
if (c == ',')
myQueue.push(s);
s.clear();
else
s += c;
if (!s.empty())
myQueue.push(s);
s.clear();
return rdeserialize(myQueue);
;
// Your Codec object will be instantiated and called as such:
// Codec codec;
// codec.deserialize(codec.serialize(root));
以上是关于剑指 Offer 37. 序列化二叉树的主要内容,如果未能解决你的问题,请参考以下文章