题目描述
blablabla
样例
[-10, 13, -1, null, null, 6, null, 2, null, null, null]
yxc解法,处理负数
C++ 代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
// Encodes a tree to a single string.
string serialize(TreeNode* root) {
string res;
dfs_serialize(root, res);
return res;
}
void dfs_serialize(TreeNode* root, string &res)
{
if(!root)
{
res += "null ";
return;
}
res += to_string(root->val) + ' ';
dfs_serialize(root->left, res);
dfs_serialize(root->right, res);
}
// Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
int u = 0;
return dfs_deserialize(data, u);
}
TreeNode* dfs_deserialize(string data, int &u)
{
if(u == data.size()) return NULL;
int k = u;
while(data[k] != ' ') k++;
if(data[u] == 'n')
{
u = k + 1;
return NULL;
}
int sum = 0;
TreeNode* root;
if(data[u] == '-')
{
u += 1;
// sum = 0;
for(int i = u; i < k; i++) sum = sum*10 + data[i] - '0';
u = k + 1;
root = new TreeNode(-sum);
}else{
// sum = 0;
for(int i = u; i < k; i++) sum = sum*10 + data[i] - '0';
u = k + 1;
root = new TreeNode(sum);
}
root->left = dfs_deserialize(data, u);
root->right = dfs_deserialize(data, u);
return root;
}
};