二叉树的序列化和反序列化C语言完整代码
时间: 2024-05-07 09:14:06 浏览: 116
二叉树的序列化是将一个二叉树转化成一个字符串,而反序列化则是将这个字符串转化成一个二叉树。下面是一个基于递归的 C 语言完整代码实现:
```
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
/* 序列化二叉树 */
void serialize(TreeNode* root, char* str) {
if(root == NULL) {
strcat(str, "# "); // #表示空节点
return;
}
char tmp[20];
sprintf(tmp, "%d ", root->val);
strcat(str, tmp); // 将当前节点的值加入字符串
serialize(root->left, str); // 递归序列化左子树
serialize(root->right, str); // 递归序列化右子树
}
/* 反序列化二叉树 */
TreeNode* deserialize(char** str) {
if(**str == '#') { // 如果当前字符是#,表示空节点
(*str)++; // 跳过空节点
return NULL;
}
int num = 0;
while(**str != ' ') { // 将字符转换成数字
num = num * 10 + (**str - '0');
(*str)++;
}
(*str)++; // 跳过空格
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = num; // 创建当前节点
root->left = deserialize(str); // 递归创建左子树
root->right = deserialize(str); // 递归创建右子树
return root;
}
/* 打印二叉树 */
void print_tree(TreeNode* root) {
if(root == NULL) {
printf("# ");
return;
}
printf("%d ", root->val);
print_tree(root->left);
print_tree(root->right);
}
int main() {
TreeNode node1 = {1, NULL, NULL};
TreeNode node2 = {2, NULL, NULL};
TreeNode node3 = {3, &node1, &node2};
char str[100] = "";
serialize(&node3, str);
printf("Serialized string: %s\n", str);
TreeNode* root = deserialize(&str);
printf("Deserialized tree: ");
print_tree(root);
return 0;
}
```
使用示例:
输入:
```
3
/ \
1 2
```
输出:
```
Serialized string: 3 1 # # 2 # #
Deserialized tree: 3 1 # # 2 # #
```
阅读全文
相关推荐
















