/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
char* Serialize(TreeNode *root) {
if(!root) {
return "#";
}
string res = to_string(root->val);
res.push_back(',');
char* left = Serialize(root->left);
char* right = Serialize(root->right);
char* ret = new char[strlen(left) + strlen(right) + res.size()];
strcpy(ret, res.c_str());
strcat(ret, left);
strcat(ret, right);
return ret;
}
TreeNode* reb (char *&s) {
if (*s == '#') {
s++;
return NULL;
}
int num = 0;
while (*s != ',') {
num = num * 10 + (*s - '0');
s ++;
}
s ++;
TreeNode* root = new TreeNode(num);
root->left = reb(s);
root->right = reb(s);
return root;
}
TreeNode* Deserialize(char *str) {
return reb(str);
}
};
先先序遍历保存下来,然后先序遍历恢复。长的一样