实现二叉树的二叉链表存储及其插入、删除、查找等操作算法。用c语言实现
时间: 2024-12-24 12:34:45 浏览: 28
实现二叉树的二叉链表存储通常采用结构体表示节点,每个节点包含两个指针,分别指向左孩子和右孩子。以下是简单的C语言实现:
```c
// 定义二叉树节点结构
typedef struct TreeNode {
int data; // 节点数据
struct TreeNode* left; // 左子节点
struct TreeNode* right; // 右子节点
} Node;
// 创建新节点
Node* createNode(int val) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode) {
newNode->data = val;
newNode->left = NULL;
newNode->right = NULL;
}
return newNode;
}
// 插入节点
void insert(Node** root, int val) {
if (*root == NULL) {
*root = createNode(val);
} else {
if (val < (*root)->data)
insert(&(*root)->left, val);
else
insert(&(*root)->right, val);
}
}
// 查找节点
Node* search(Node* root, int val) {
if (root == NULL || root->data == val)
return root;
if (val < root->data)
return search(root->left, val);
return search(root->right, val);
}
// 删除节点(这里简化处理,仅考虑简单情况)
void deleteNode(Node** root, int val) {
if (*root == NULL)
return;
if (val < (*root)->data)
deleteNode(&(*root)->left, val);
else if (val > (*root)->data)
deleteNode(&(*root)->right, val);
else { // 找到需要删除的节点
if ((*root)->left == NULL && (*root)->right == NULL) {
free(*root); // 没有子节点,直接释放内存
*root = NULL;
} else if ((*root)->left == NULL) {
Node* temp = *root;
*root = (*root)->right;
free(temp);
} else if ((*root)->right == NULL) {
Node* temp = *root;
*root = (*root)->left;
free(temp);
} else { // 有两个子节点
Node* temp = findMinNode(&(*root)->right); // 找到最小值节点替换
(*root)->data = temp->data;
deleteNode(&(*root)->right, temp->data);
}
}
}
// 找到最小节点辅助函数
Node* findMinNode(Node* node) {
while (node->left != NULL)
node = node->left;
return node;
}
```
以上就是基本的二叉搜索树(BST)的二叉链表存储实现以及插入、查找和删除操作。请注意,实际项目中可能会涉及到更复杂的删除操作,特别是当需要保持BST特性(左小右大)时。
阅读全文