zoukankan      html  css  js  c++  java
  • 61、剑指offer--序列化二叉树

    题目描述
    请实现两个函数,分别用来序列化和反序列化二叉树
     
    解题思路:序列化的时候,遇到无子结点,则填#来占位;对于反序列化时,每次遇到#返回空
     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()] = '';
    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 != '' && **str != ',')
    52         {
    53             num = num*10 + ((**str) - '0'); //求出每个节点的值
    54             ++(*str);
    55         }
    56         TreeNode *root = new TreeNode(num);
    57         if(**str == '')
    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 };
  • 相关阅读:
    【Alpha】开发日志Day30714
    【Alpha】开发日志Day10712
    实验1
    实验2
    图深度优先搜索最短路径
    一切都结束了
    C#操作XML(读XML,写XML,更新,删除节点,与dataset结合等)
    字符串匹配
    纯数学规律题
    高精度
  • 原文地址:https://www.cnblogs.com/qqky/p/7123222.html
Copyright © 2011-2022 走看看