请实现两个函数,分别用来序列化和反序列化二叉树
IDEA
序列化指的是将一棵二叉树保存到文件中,反序列化就是从文件中读取二叉树结点值重构原来的二叉树。
先序遍历的代码可以完成序列化二叉树的工作。
1.去掉const属性:const_case<char*> (&num),因为不能把一个const变量直接赋给一个非const变量,必须要转换。
const char m = 't'; const char *cm = &m; char *n = const_cast<char*>(cm);
2.const char *c_str()
c_str()函数返回一个指向正规c字符串的指针,内容和string类的本身对象是一样的,通过string类的c_str()函数能够把string对象转换成c中的字符串的样式;
CODE
/*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; Serialize1(root,str); return const_cast<char*>(str.c_str()); } void Serialize1(TreeNode *root,string &str) { if (root == NULL) { str+="#,"; return; } string tmp=to_string(root->val); tmp.push_back(','); str+=tmp; Serialize1(root->left,str); Serialize1(root->right,str); } TreeNode* Deserialize(char *str) { if (str==NULL||*str =='/0') { return NULL; } int i=0; return deserialize1(str,i); } TreeNode *deserialize1(char *str,int &num) { if (str[num] =='#') { num+=2; return NULL; } int val=0; while (str[num]!= ','&&str[num] != '/0') { val = val*10+str[num]-'0'; num++; } num++; TreeNode *root=new TreeNode(val); root->left=deserialize1(str,num); root->right=deserialize1(str,num); return root; }};
新闻热点
疑难解答