c语言实现二叉排序树的查找、插入、建立、删除和打印二叉排序树形
时间: 2023-08-04 22:06:16 浏览: 167
好的,我可以为您解答关于C语言实现二叉排序树的相关问题。
首先,我们需要了解什么是二叉排序树。二叉排序树是一种特殊的二叉树,它要求左子树的所有节点都小于根节点,右子树的所有节点都大于根节点。这样,我们就可以利用二叉排序树实现快速的查找、插入、删除等操作。
接下来,我将分别介绍如何实现二叉排序树的查找、插入、建立、删除和打印二叉排序树形。
1. 查找
查找操作就是在二叉排序树中查找某个关键字是否存在。查找操作可以使用递归实现。
```c
// 查找操作
bool searchBST(BiTree T, int key) {
if (!T) {
return false;
}
if (T->data == key) {
return true;
} else if (T->data > key) {
return searchBST(T->lchild, key);
} else {
return searchBST(T->rchild, key);
}
}
```
2. 插入
插入操作就是向二叉排序树中插入一个新节点。插入操作也可以使用递归实现。
```c
// 插入操作
bool insertBST(BiTree &T, int key) {
if (!T) {
T = new BiTNode;
T->data = key;
T->lchild = T->rchild = nullptr;
return true;
}
if (T->data == key) {
return false;
} else if (T->data > key) {
return insertBST(T->lchild, key);
} else {
return insertBST(T->rchild, key);
}
}
```
3. 建立
建立操作就是通过一组关键字建立一个二叉排序树。建立操作可以使用循环实现。
```c
// 建立操作
void createBST(BiTree &T, int *keys, int n) {
T = nullptr;
for (int i = 0; i < n; i++) {
insertBST(T, keys[i]);
}
}
```
4. 删除
删除操作就是从二叉排序树中删除一个节点。删除操作可以分为三种情况:
- 被删除节点没有左右子树,直接删除;
- 被删除节点只有一个子树,将该子树替换到被删除节点的位置;
- 被删除节点有左右子树,找到被删除节点的前驱或后继节点替换到被删除节点的位置。
```c
// 删除操作
bool deleteBST(BiTree &T, int key) {
if (!T) {
return false;
}
if (T->data == key) {
if (!T->lchild && !T->rchild) {
delete T;
T = nullptr;
} else if (!T->lchild || !T->rchild) {
BiTree temp = T;
T = T->lchild ? T->lchild : T->rchild;
delete temp;
} else {
BiTree temp = T->lchild;
while (temp->rchild) {
temp = temp->rchild;
}
T->data = temp->data;
deleteBST(T->lchild, temp->data);
}
return true;
} else if (T->data > key) {
return deleteBST(T->lchild, key);
} else {
return deleteBST(T->rchild, key);
}
}
```
5. 打印
打印操作就是按照中序遍历的顺序打印二叉排序树中的所有节点。
```c
// 打印操作
void printBST(BiTree T) {
if (T) {
printBST(T->lchild);
cout << T->data << " ";
printBST(T->rchild);
}
}
```
至此,我们已经完成了二叉排序树的查找、插入、建立、删除和打印操作的实现。完整代码如下:
阅读全文