二叉树的反序列化c语言
时间: 2024-08-13 20:05:02 浏览: 110
在C语言中,二叉树的反序列化通常指的是将一个二叉树的前序遍历或中序遍历结果恢复成原始的二叉树结构。这可以通过递归的方式来实现,因为前序遍历(根-左-右)和中序遍历(左-根-右)包含足够的信息来重构树。
以下是一个简单的示例,展示如何根据前序遍历和中序遍历重建一棵二叉树:
```c
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
TreeNode* buildTree(char** pre, char** in, int preIndex, int inIndex) {
if (preIndex == 0 || inIndex == 0) return NULL; // 如果遍历结束,返回NULL
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = atoi(pre[preIndex]);
// 找到当前节点的右子节点的中序遍历索引
int inRight = -1;
for (int i = inIndex; i >= 0; --i) {
if (in[i] == root->val) {
inRight = i;
break;
}
}
// 用找到的右子节点索引构建左右子树
root->left = buildTree(pre, in, preIndex + 1, inRight);
root->right = buildTree(pre, in, inRight + 1, inIndex - 1);
return root;
}
```
在这个例子中,`pre`数组存储了前序遍历的节点值,`in`数组存储了中序遍历的节点值。函数`buildTree`接收这些数组的指针以及它们在遍历中的当前位置,然后根据这些信息创建一个新的节点,并递归地构造左右子树。
阅读全文