二叉排序树的删除算法
时间: 2023-07-23 18:04:24 浏览: 118
二叉排序树的删除算法需要分为以下三种情况:
1. 被删除节点没有子节点:直接删除该节点即可。
2. 被删除节点只有一个子节点:将该节点的子节点替代该节点即可。
3. 被删除节点有两个子节点:需要找到该节点的前驱或后继节点,将前驱或后继节点的值替换被删除节点的值,然后再删除前驱或后继节点。
下面是二叉排序树的删除算法实现:
```c++
void DeleteBST(BSTree &T, int key) {
if (!T) return; // 空树
if (T->data == key) { // 找到要删除的节点
if (!T->lchild && !T->rchild) { // 没有子节点
free(T);
T = NULL;
} else if (!T->lchild) { // 只有右子节点
BSTree q = T;
T = T->rchild;
free(q);
} else if (!T->rchild) { // 只有左子节点
BSTree q = T;
T = T->lchild;
free(q);
} else { // 有两个子节点
BSTree p = T->rchild;
while (p->lchild) p = p->lchild; // 找到后继节点
T->data = p->data; // 将后继节点的值替换被删除节点的值
DeleteBST(T->rchild, p->data); // 删除后继节点
}
} else if (T->data > key) { // 在左子树中删除
DeleteBST(T->lchild, key);
} else { // 在右子树中删除
DeleteBST(T->rchild, key);
}
}
```
其中,`BSTree` 是指向二叉排序树节点的指针类型,`T` 是指向二叉排序树根节点的指针,`key` 是要删除的节点的值。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231044833.png)