序列化二叉树

题目描述

  请实现两个函数,分别用来序列化和反序列化二叉树
  思路:以前序遍历为基础,考虑NULL指针。将NULL指针记为$。注意字符串的处理,将数字转化为字符串,将字符串转化为数字。
 1 class Solution {
 2 public:
 3     void WriteToStr(int val, char *str, int &i)
 4     {
 5         char tmp[20];
 6         int j=0;
 7         while(val)
 8         {
 9             int num=val%10;
10             val=val/10;
11             tmp[j++]=(char)(num-0+'0');
12         }
13         while(j--)
14         {
15             str[i++]=tmp[j];
16         }
17         str[i++]=',';
18     }
19     void MySerialize(TreeNode *root, char *str, int &i)
20     {
21         if(root==NULL)
22         {
23             str[i++]='$';
24             str[i++]=',';
25         }else{
26             WriteToStr(root->val, str, i);//将数字转化为字符串
27             MySerialize(root->left, str, i);
28             MySerialize(root->right, str, i);
29         }
30     }
31     char* Serialize(TreeNode *root) {    
32         char *str=new char[1000];
33         int i=0;
34         MySerialize(root, str, i);
35         str[i]='\0';
36         return str;
37     }
38     bool ReadFromStr(char *str, int &i, int &val)
39     {
40         if(str[i]=='$')
41         {
42             i=i+2;
43             return false;
44         }
45         int tmp[20];
46         int j;
47         while(str[i]!=',' && str[i]!='\0')
48         {
49             tmp[j++]=str[i++];
50         }
51         ++i;
52         val=0;
53         for(int idx=0; idx<j; ++idx)
54         {
55             val=val*10+(int)(tmp[idx]-'0'+0);
56         }
57         return true;
58     }
59     TreeNode * MyDeserialize(char *str, int &i)
60     {
61         int val;
62         if(ReadFromStr(str, i, val))//将字符串转化为数字,遇见$则返回false
63         {
64             TreeNode * tmp=new TreeNode(val);
65             tmp->left=MyDeserialize(str, i);
66             tmp->right=MyDeserialize(str, i);
67             return tmp;
68         }else{
69             return NULL;
70         }
71     }
72     TreeNode* Deserialize(char *str) {
73         if(str==NULL)return NULL;
74         int i=0;
75         return MyDeserialize(str, i);
76     }
77 };

 

posted @ 2017-12-26 15:42  jeysin  阅读(117)  评论(0编辑  收藏  举报