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 };
  • 相关阅读:
    flume 安装过程记录
    hive 动态分区插入
    hive 数据导入
    scala 学习笔记
    hive 日志
    Linux下设置和查看环境变量
    数据结构(4):图解递归调用机制
    使用数据结构栈实现表达式计算器
    数据结构(3):java使用数组模拟堆栈
    使用Vue和Element-ui的cdn模式临摹一个后台框架
  • 原文地址:https://www.cnblogs.com/qqky/p/7123222.html
Copyright © 2011-2022 走看看