标签:结束 声明 get 二叉树遍历 建立 基于 inter 遍历 http
题目链接:序列化二叉树
题意:
题解:这个题就是前序遍历,序列化二叉树,然后反序列化重构二叉树。具体的看代码吧。
这题好复杂。思路倒是很简单。。参考了下剑指里的写法。。QAQ
代码:
1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 }; 10 */ 11 class Solution { 12 public: 13 char* Serialize(TreeNode *root) { 14 if(root == NULL) return NULL; 15 string str; 16 Serialize(root,str); 17 //string转char*字符串 18 int len = str.length(); 19 char* ans = new char[len+1]; 20 for(int i =0 ; i < len;i++){ 21 ans[i] = str[i]; 22 } 23 ans[len] = ‘\0‘; 24 return ans; 25 } 26 TreeNode* Deserialize(char* str) { 27 if(str == NULL) return NULL; 28 TreeNode* ans = Deserialize(&str); 29 return ans; 30 } 31 32 void Serialize(TreeNode* root,string& str){ 33 if(root == NULL){ 34 str += ‘#‘; return; 35 }//指针为空 36 37 string tmp = to_string(root->val); 38 str += tmp; 39 str +=‘,‘; //区分每个节点,先序遍历 40 Serialize(root->left,str); 41 Serialize(root->right,str); 42 } 43 //char**的声明很重要。 44 TreeNode* Deserialize(char** str){ 45 //到达叶节点 46 if(**str == ‘#‘){ 47 (*str)++; return NULL; 48 } 49 //转换字符 50 int num = 0; 51 while(**str != ‘,‘ && **str !=‘\0‘){ 52 num = num*10+((**str) - ‘0‘); 53 (*str)++; 54 } 55 //建树 56 TreeNode* root = new TreeNode(num); 57 if(**str ==‘\0‘) return root; 58 else (*str)++; 59 root->left = Deserialize(str); 60 root->right = Deserialize(str); 61 return root; 62 } 63 };
标签:结束 声明 get 二叉树遍历 建立 基于 inter 遍历 http
原文地址:https://www.cnblogs.com/Asumi/p/12431669.html