二叉排序树的实现代码
时间: 2023-12-10 19:34:53 浏览: 75
二叉排序树的实现
3星 · 编辑精心推荐
以下是二叉排序树的C语言实现代码,包含了创建、销毁、清空、插入、删除、查找等操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉排序树结点结构体
typedef struct BSTNode {
int data; // 结点数据
struct BSTNode *left; // 左子树指针
struct BSTNode *right; // 右子树指针
} BSTNode, *BSTree;
// 创建二叉排序树
void createBSTree(BSTree *T) {
*T = NULL;
}
// 销毁二叉排序树
void destroyBSTree(BSTree *T) {
if (*T != NULL) {
if ((*T)->left != NULL) {
destroyBSTree(&((*T)->left));
}
if ((*T)->right != NULL) {
destroyBSTree(&((*T)->right));
}
free(*T);
*T = NULL;
}
}
// 清空二叉排序树
void clearBSTree(BSTree *T) {
destroyBSTree(T);
createBSTree(T);
}
// 插入指定结点至二叉排序树
int insertBSTree(BSTree *T, int data) {
if (*T == NULL) {
*T = (BSTree)malloc(sizeof(BSTNode));
(*T)->data = data; (*T)->left = NULL;
(*T)->right = NULL;
return 1;
} else if (data == (*T)->data) {
return 0;
} else if (data < (*T)->data) {
return insertBSTree(&((*T)->left), data);
} else {
return insertBSTree(&((*T)->right), data);
}
}
// 删除二叉排序树指定结点
int deleteBSTree(BSTree *T, int data) {
if (*T == NULL) {
return 0;
} else {
if (data == (*T)->data) {
if ((*T)->left == NULL && (*T)->right == NULL) {
free(*T);
*T = NULL;
} else if ((*T)->left == NULL) {
BSTree temp = *T;
*T = (*T)->right;
free(temp);
} else if ((*T)->right == NULL) {
BSTree temp = *T;
*T = (*T)->left;
free(temp);
} else {
BSTree temp = (*T)->right;
while (temp->left != NULL) {
temp = temp->left;
}
(*T)->data = temp->data;
deleteBSTree(&((*T)->right), temp->data);
}
return 1;
} else if (data < (*T)->data) {
return deleteBSTree(&((*T)->left), data);
} else {
return deleteBSTree(&((*T)->right), data);
}
}
}
// 获取二叉排序树指定结点
BSTree getBSTreeNode(BSTree T, int data) {
if (T == NULL) {
return NULL;
} else if (data == T->data) {
return T;
} else if (data < T->data) {
return getBSTreeNode(T->left, data);
} else {
return getBSTreeNode(T->right, data);
}
}
// 获取二叉排序树根结点
BSTree getBSTreeRoot(BSTree T) {
return T;
}
```
阅读全文