码迷,mamicode.com
首页 > 其他好文 > 详细

61、剑指offer--序列化二叉树

时间:2017-07-05 21:10:47      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:返回   log   拼接   bsp   1.7   数字   else   ==   turn   

题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
 
解题思路:序列化的时候,遇到无子结点,则填#来占位;对于反序列化时,每次遇到#返回空
 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     void Serialize(TreeNode *root, string &str)
14     {
15         if(root == NULL)
16         {
17             str += #;//用#代表null
18             return;//返回上一层
19         }
20         else
21         {
22             string r = to_string(root->val);//值转字符串
23            str += r;//字符串拼接
24            str += ,;//数字后用,进行节点分隔
25            Serialize(root->left,str);
26            Serialize(root->right,str);
27         }
28     }
29     char* Serialize(TreeNode *root) {
30         if(root == NULL)
31             return NULL;
32         string str;
33         Serialize(root, str);
34         //字符串转char *
35         char *ret = new char[str.length()+1];
36         for(int i=0;i<str.length();i++)
37         {
38             ret[i] = str[i];
39         }
40         ret[str.length()] = \0;
41         return ret;
42     }
43     TreeNode *deserialize(char **str)
44     {
45         if(**str == #)//空的时候返回
46         {
47             ++(*str);
48             return NULL;
49         }
50         int num = 0;
51         while(**str != \0 && **str != ,)
52         {
53             num = num*10 + ((**str) - 0); //求出每个节点的值
54             ++(*str);
55         }
56         TreeNode *root = new TreeNode(num);
57         if(**str == \0)
58             return root;
59         else
60             (*str)++;//跨过‘,‘
61         root->left = deserialize(str);
62         root->right = deserialize(str);
63         return root;
64     }
65     TreeNode* Deserialize(char *str) {
66         if(str == NULL)
67             return NULL;
68         TreeNode *res = deserialize(&str);
69         return res;
70     }
71 };

 

61、剑指offer--序列化二叉树

标签:返回   log   拼接   bsp   1.7   数字   else   ==   turn   

原文地址:http://www.cnblogs.com/qqky/p/7123222.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!