二叉树的序列化c语言
时间: 2024-08-13 10:05:02 浏览: 58
二叉树的序列化是指将一棵二叉树转化为一串字符(通常是字符串)的过程,这样就可以方便地存储和传输。在C语言中,常见的二叉树序列化方法是使用前序遍历的顺序,即将根节点、左子树序列化后再加上右子树序列化的结果。
以下是一个简单的二叉树序列化的C语言示例,使用递归方法:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 序列化二叉树函数
char* serializeTree(TreeNode* root) {
if (root == NULL) {
return "";
}
char str[64]; // 预留足够的空间存储序列化后的字符串
sprintf(str, "%d, %s, %s", root->val, serializeTree(root->left), serializeTree(root->right));
return str;
}
// 反序列化二叉树函数
TreeNode* deserializeTree(const char* data) {
if (data == NULL || strcmp(data, "") == 0) {
return NULL;
}
char* comma = strchr(data, ',');
int val = atoi(data); // 提取当前节点的值
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = deserializeTree(comma + 1);
node->right = deserializeTree(comma + 2 + strlen(comma + 1)); // 注意这里计算右子树的起始位置
return node;
}
int main() {
// 创建一个简单的二叉树并序列化
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = 1;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->val = 2;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->val = 3;
char* serialized = serializeTree(root);
printf("Serialized tree: %s\n", serialized);
// 反序列化
TreeNode* deserializedRoot = deserializeTree(serialized);
printf("Deserialized tree values: %d, %d, %d\n", deserializedRoot->val, deserializedRoot->left->val, deserializedRoot->right->val);
return 0;
}
```
阅读全文