請實現兩個函數,分別用來序列化和反序列化二叉樹
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; }};
新聞熱點
疑難解答