7-2 二叉查找树的构建及序列化(C语言)
时间: 2024-10-18 20:10:56 浏览: 98
在C语言中,构建二叉查找树(Binary Search Tree,BST)通常从根节点开始,然后递归地插入新元素。构建过程如下:
1. 创建一个结构体表示二叉树的节点,包含整数值、左孩子指针和右孩子指针:
```c
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
```
2. 插入函数`insertNode`,它会比较新值与当前节点值,如果新值小于当前值,就将其放在左子树;反之,放在右子树,并递归处理子节点:
```c
TreeNode* insertNode(TreeNode** root, int val) {
if (*root == NULL) {
*root = (TreeNode*)malloc(sizeof(TreeNode));
(*root)->val = val;
return *root;
}
if (val < (*root)->val)
(*root)->left = insertNode(&(*root)->left, val);
else
(*root)->right = insertNode(&(*root)->right, val);
return *root;
}
```
3. 序列化BST到数组的过程,可以采用先序遍历(根-左-右),将每个节点的值存储起来,形成序列:
```c
void inorderTraversal(TreeNode* root, int* arr, int& i) {
if (root != NULL) {
inorderTraversal(root->left, arr, i);
arr[i++] = root->val;
inorderTraversal(root->right, arr, i);
}
}
// 序列化函数
void serializeBST(TreeNode* root, int* result) {
int len = 0;
inorderTraversal(root, result, len);
result[len] = -1; // 标志序列结束
}
```
4. 要恢复二叉树,从序列的第一个非负数开始,重建节点结构。
阅读全文