请实现两个函数,分别用来序列化和反序列化二叉树。您需要确保二叉树可以序列化为字符串,并且可以将此字符串反序列化为原始树结构。

class Solution {
public:

// Encodes a tree to a single string.
string serialize(TreeNode* root) {
    string res;
    dfs_s(root, res);
    return res;
}

void dfs_s(TreeNode* root, string &res){
    if(!root) {
        res += "null ";//如果当前节点为空,保存null和一个空格
        return ;
    }
    res += to_string(root->val) + ' ';//如果当前节点不为空,保存数字和一个空格
    dfs_s(root->left, res);
    dfs_s(root->right, res);
}
// Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
    int u = 0;  //用来保存当前的字符串遍历的位置
    return dfs_d(data, u);
}

TreeNode* dfs_d(string data, int &u){//这里的u是传的引用,不是值传递
    if (u == data.size()) return NULL;  //如果已经达到了字符串的尾端,则退出。
    int k = u;
    while(data[k] != ' ') k++; //k记录当前数字的位数如134是个三位数的数字,56是个两位数的数字,退出的时候,k指向了字符的中间的空格,所以回到下个字符的首部需要加1.

    if(data[u] == 'n') {//如果当前字符串是“null”
        u = k+1;//回到下一个数字的首部,注意是u = k+1, 不是u = u+1;
        return NULL;//表示这次构造的是一个null节点,并没有孩子节点,所以跳过后面的递归
    }
    int val = 0;
    //如果数字是负的
    if(data[u] == '-'){
         for (int i = u+1; i < k; i++) val = val * 10 + data[i] - '0';
         val  = -val;
    }
    else{
    //如果是数字是正的
        for (int i = u; i < k; i++) val = val * 10 + data[i] - '0';
    }
    u = k + 1;//回到下个数字的首部
    //递归算法总是先写退出条件,然后才递归调用。
    auto root = new TreeNode(val);
    root->left = dfs_d(data, u);
    root->right = dfs_d(data, u);
    return root;
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-04 08:42:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-04 08:42:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-04 08:42:03       87 阅读
  4. Python语言-面向对象

    2024-04-04 08:42:03       96 阅读

热门阅读

  1. for in与for of的区别

    2024-04-04 08:42:03       33 阅读
  2. C语言什么是全局变量?如何应⽤?

    2024-04-04 08:42:03       33 阅读
  3. 中值滤波算法与SSE2指令集并行优化

    2024-04-04 08:42:03       36 阅读
  4. 云计算与容器化

    2024-04-04 08:42:03       40 阅读
  5. SpringMvc处理器方法参数获取

    2024-04-04 08:42:03       37 阅读
  6. 神经网络、CNN、RNN、LSTM

    2024-04-04 08:42:03       38 阅读
  7. OpenCV构建交互式图像距离测量工具

    2024-04-04 08:42:03       39 阅读
  8. python vtk获取模型角度

    2024-04-04 08:42:03       31 阅读
  9. [动态规划]代码随想录总结(自用)

    2024-04-04 08:42:03       32 阅读
  10. 限制promise并行执行个数

    2024-04-04 08:42:03       38 阅读