题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
思路是别人的。反正用C++代码写出来的没看明白。倒是Java版本的比较简单!!!
/*
1. 对于序列化:使用前序遍历,递归的将二叉树的值转化为字符,并且在每次二叉树的结点
不为空时,在转化val所得的字符之后添加一个' , '作为分割。对于空节点则以 '#' 代替。
2. 对于反序列化:按照前序顺序,递归的使用字符串中的字符创建一个二叉树(特别注意:
在递归时,递归函数的参数一定要是char ** ,这样才能保证每次递归后指向字符串的指针会
随着递归的进行而移动!!!)
*/
/* 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==NULL) return NULL; string str; Serialize(root,str); char *ret=new char[str.length()+1]; int i; for(i=0;i<str.length();i++) { ret[i]=str[i]; } ret[i]=' '; return ret; } void Serialize(TreeNode *root,string& str) { if(root==NULL) { 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==NULL) return NULL; TreeNode *ret=Deserialize(&str); return ret; } TreeNode* Deserialize(char **str) { if(**str=='#') { ++(*str); return NULL; } int num=0; while(**str!=' ' && **str!=',') { num=num*10+((**str)-'0'); ++(*str); } TreeNode *root=new TreeNode(num); if(**str == ' ') return root; else (*str)++; root->left =Deserialize(str); root->right=Deserialize(str); return root; } };