题目
请实现两个函数,分别用来序列化和反序列化二叉树
思路
在序列化二叉树中,nullptr节点用一个特殊的字符“#”代替,本题采用中序遍历来序列化
class Solution { public: char* Serialize(TreeNode *root) { if(!root) return nullptr; string str; Serialize(root, str); char *res = new char[str.length() + 1]; int i; for(i = 0; i < str.length(); i++) res[i] = str[i]; res[i] = '\0'; return res; } void Serialize(TreeNode *root, string& str){ if(!root){ str += '#'; return; } string r = to_string(root->val); str += r; str += ','; Serialize(root->left, str); Serialize(root->right, str); } TreeNode* Deserialize(char *str) { if(!str) return nullptr; TreeNode *res = Deserialize(&str); return res; } TreeNode* Deserialize(char **str){ //由于递归时,会不断的向后读取字符串 if(**str == '#'){ //所以一定要用**str, ++(*str); //以保证得到递归后指针str指向未被读取的字符 return nullptr; } int num = 0; while(**str != '\0' && **str != ','){ num = num*10 + ((**str) - '0'); // 将字符串变为数值 ++(*str); } TreeNode *root = new TreeNode(num); if(**str == '\0') return root; else (*str)++; root->left = Deserialize(str); root->right = Deserialize(str); return root; } };