您的位置:首页 > 其它

297. Serialize and Deserialize Binary Tree

2016-02-10 17:29 344 查看
/**
* 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 {
private:
void serialize_dfs(TreeNode *root, string &res, bool first) {
if (!first) {
res += ",";
}

if (!root) {
res += "#";
return;
}

res += to_string(root->val);
serialize_dfs(root->left, res, false);
serialize_dfs(root->right, res, false);
}

void deserilize_dfs(TreeNode *&root, string &data) {
size_t pos = data.find(",");
if (pos == std::string::npos) return;

string val = data.substr(0, pos);
data = data.substr(pos + 1);
if (val == "#") return;

root = new TreeNode(stoi(val));
deserilize_dfs(root->left, data);
deserilize_dfs(root->right, data);
}

public:

// Encodes a tree to a single string.
string serialize(TreeNode* root) {
string data;
serialize_dfs(root, data, true);
return data;
}

// Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
if (data.size() == 0) return NULL;

TreeNode *root = NULL;
deserilize_dfs(root, data);

return root;
}
};

// Your Codec object will be instantiated and called as such:
// Codec codec;
// codec.deserialize(codec.serialize(root));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: