二叉树的序列化与反序列化
来源:互联网 发布:nike跑步鞋推荐 知乎 编辑:程序博客网 时间:2024/03/28 21:47
参考网上的代码,使用先序遍历,若左/右孩子为空则记为‘#’
用惯了string, 一个char* 的返回值快把我搞cry了
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};class Solution {char *rlt;char *fixRlt;public:Solution() : rlt(new char[1000]){}~Solution(){delete[] rlt;delete[] fixRlt;}char* Serialize(TreeNode *root) {if (root == nullptr){fixRlt = new char[1];fixRlt[0] = '\0';return fixRlt;}int i = 0;s_core(root, i);fixRlt = new char[i + 1];for (int j = 0; j < i; ++j)fixRlt[j] = rlt[j];fixRlt[i] = '\0';return fixRlt;}TreeNode* Deserialize(char *str) {TreeNode* root;if (str[0] == '\0')return nullptr;int i = 0;ds_core(str, i, root);return root;}void s_core(TreeNode *root, int& i){if (!root){rlt[i] = '#';rlt[i + 1] = ' ';i += 2;}else{string valStr = intToString(root->val);for (size_t j = 0; j < valStr.length(); ++j, ++i)rlt[i] = valStr[j];rlt[i++] = ' ';s_core(root->left, i);s_core(root->right, i);}}void ds_core(char *str, int& i, TreeNode*& root){if (str[i] == '\0')return;int token = 0;bool isNumber = false;if (!readNextToken(str, i, isNumber, token))return;if (isNumber) {root = new TreeNode(0);root->val = token;ds_core(str, i, root->left);ds_core(str, i, root->right);}}bool readNextToken(char* str, int& i, bool& isNum, int& token){token = 0;while (str[i] == ' ')++i;if (str[i] == '\0'){isNum = false;return false;}else if (str[i] == '#'){++i;isNum = false;return false;}else{isNum = true;while (str[i] >= '0' && str[i] <= '9'){token *= 10;token += str[i] - '0';++i;}return true;}}string intToString(int x){stringstream ss;ss << x;return ss.str();}};
0 0
- 二叉树的序列化与反序列化
- 二叉树的序列化与反序列化
- 二叉树的序列化与反序列化
- 二叉树的序列化与反序列化
- 二叉树的序列化与反序列化
- 二叉树的序列化与反序列化
- 二叉树------序列化与反序列化二叉树
- 序列化/反序列化二叉树
- 序列化/反序列化二叉树
- 序列化/反序列化二叉树
- 序列化/反序列化二叉树
- 序列化反序列二叉树
- 题目:二叉树的序列化和反序列化
- 二叉树的序列化和反序列化
- 二叉树的序列化和反序列化
- 二叉树的序列化和反序列化
- 二叉树的序列化和反序列化
- 二叉树的序列化和反序列化
- JAVA WebService创建过程详细 包括服务器端以及客户端
- linux 增加swap空间
- 零基础入门学习C++ 002
- linux 命令练习
- 转一个基于JavaScript的ddos的文章
- 二叉树的序列化与反序列化
- NSPredicate
- VB中 Split的意思
- 什么是IaaS, PaaS和SaaS及其区别
- java适配器
- Magicka 局域网 联机
- 用css3或者jquery实现切换按钮效果
- python获取当前时间和前一天时间
- HTTP协议详解