LeetCode //C - 297. Serialize and Deserialize Binary Tree

297. Serialize and Deserialize Binary Tree

Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.

Design an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized to the original tree structure.

Clarification: The input/output format is the same as how LeetCode serializes a binary tree. You do not necessarily need to follow this format, so please be creative and come up with different approaches yourself.

Example 1:

Input: root = [1,2,3,null,null,4,5]
Output: [1,2,3,null,null,4,5]

Example 2:

Input: root = []
Output: []

Constraints:
  • The number of nodes in the tree is in the range [ 0 , 1 0 4 ] [0, 10^4] [0,104].
  • -1000 <= Node.val <= 1000

From: LeetCode

Link: 297. Serialize and Deserialize Binary Tree


Solution:

Ideas:
  • Serialization:
    • We traverse the tree in pre-order.
    • Each node's value is appended to the buffer string.
    • For NULL nodes, we append "#," to indicate an absence of a child.
  • Deserialization:
    • We parse the string token by token.
    • If we encounter a "#", we return NULL for that node.
    • Otherwise, we create a new node and recursively build its left and right children.
Code:
c 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
// Function to create a new tree node.
struct TreeNode* newNode(int val) {
    struct TreeNode* node = (struct TreeNode*)malloc(sizeof(struct TreeNode));
    node->val = val;
    node->left = NULL;
    node->right = NULL;
    return node;
}

// Helper function for serialization.
void serializeHelper(struct TreeNode* root, char* buffer, int* index) {
    if (root == NULL) {
        strcpy(&buffer[*index], "#,");
        *index += 2;
        return;
    }
    
    int len = sprintf(&buffer[*index], "%d,", root->val);
    *index += len;
    
    serializeHelper(root->left, buffer, index);
    serializeHelper(root->right, buffer, index);
}

// Encodes a tree to a single string.
char* serialize(struct TreeNode* root) {
    // Allocate a buffer to store the serialized string.
    // Size of 10000 * 6 is arbitrary, based on the problem constraints.
    char* buffer = (char*)malloc(10000 * 6);
    int index = 0;
    serializeHelper(root, buffer, &index);
    buffer[index] = '\0';
    return buffer;
}

// Helper function for deserialization.
struct TreeNode* deserializeHelper(char** data) {
    if (**data == '#') {
        *data += 2; // Skip '#,'
        return NULL;
    }
    
    int val = 0;
    int sign = 1;
    if (**data == '-') { // Check for negative numbers
        sign = -1;
        (*data)++;
    }
    while (**data != ',') {
        val = val * 10 + (**data - '0');
        (*data)++;
    }
    val *= sign;
    (*data)++; // Skip ','

    struct TreeNode* node = newNode(val);
    node->left = deserializeHelper(data);
    node->right = deserializeHelper(data);
    return node;
}

// Decodes your encoded data to tree.
struct TreeNode* deserialize(char* data) {
    return deserializeHelper(&data);
}

// Your functions will be called as such:
// char* data = serialize(root);
// deserialize(data);
相关推荐
bubiyoushang8885 分钟前
基于蚁群算法的直流电机PID参数整定 MATLAB 实现
数据结构·算法·matlab
风筝在晴天搁浅13 分钟前
hot100 240.搜索二维矩阵Ⅱ
算法·矩阵
南棱笑笑生17 分钟前
20251224给飞凌OK3588-C开发板适配Rockchip原厂的Buildroot【linux-6.1】系统时确认ssh服务【内置dropbear】
linux·c语言·ssh·rockchip
girl-072621 分钟前
2025.12.24代码分析
算法
永远睡不够的入1 小时前
直接插入排序、希尔排序、选择排序
数据结构·算法·排序算法
历程里程碑1 小时前
hot 206
java·开发语言·数据结构·c++·python·算法·排序算法
Tipriest_1 小时前
C++ 的 ranges 和 Python 的 bisect 在二分查找中的应用与实现
c++·python·算法·二分法
晨晖22 小时前
顺序查找:c语言
c语言·开发语言·算法
LYFlied3 小时前
【每日算法】LeetCode 64. 最小路径和(多维动态规划)
数据结构·算法·leetcode·动态规划
Salt_07283 小时前
DAY44 简单 CNN
python·深度学习·神经网络·算法·机器学习·计算机视觉·cnn