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);
相关推荐
会员源码网8 小时前
使用`mysql_*`废弃函数(PHP7+完全移除,导致代码无法运行)
后端·算法
木心月转码ing9 小时前
Hot100-Day10-T438T438找到字符串中所有字母异位词
算法
HelloReader10 小时前
Wi-Fi CSI 感知技术用无线信号“看见“室内的人
算法
颜酱12 小时前
二叉树分解问题思路解题模式
javascript·后端·算法
qianpeng89714 小时前
水声匹配场定位原理及实验
算法
董董灿是个攻城狮1 天前
AI视觉连载8:传统 CV 之边缘检测
算法
RuoZoe1 天前
重塑WPF辉煌?基于DirectX 12的现代.NET UI框架Jalium
c语言
AI软著研究员1 天前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish1 天前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱1 天前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法