【 声明:版权所有,转载请标明出处,请勿用于商业用途。 联系信箱:libin493073668@sina.com】
题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
思路
二叉树的遍历应该也做了不少了,所以递归实现前序遍历和由前序遍历得到的串重新构树应该不难,这道题主要的问题是我们对于输入流的控制。
/* 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) { stringstream Str; Serialize(root,Str); const char *c_Str = Str.str().c_str(); char *serial = new char [strlen(c_Str)+1]; strcpy(serial,c_Str); return serial; } TreeNode* Deserialize(char *str) { if(str==nullptr) return nullptr; stringstream ss(str); return Deserialize(ss); } void Serialize(TreeNode *root,stringstream& out) { if(root==nullptr) { out<<"#"<<endl; return ; } out<<root->val<<endl; Serialize(root->left,out); Serialize(root->right,out); } TreeNode* Deserialize(stringstream& in) { int val; if(getNumber(in,val)) { TreeNode *p = new TreeNode(val); p->left = Deserialize(in); p->right = Deserialize(in); return p; } return nullptr; } bool getNumber(stringstream& in,int& val) { char buf[32]; in>>buf; if(buf[0]=='#') return false; val = atoi(buf); return true; } };
版权声明:本文为博主原创文章,如果转载,请注明出处
原文地址:http://blog.csdn.net/libin1105/article/details/48435901