C语言删除二叉排序树节点
时间: 2023-12-12 22:32:31 浏览: 85
C语言删除二叉排序树节点的步骤如下:
1. 首先找到要删除的节点,如果该节点不存在,则直接返回。
2. 如果要删除的节点没有子节点,直接删除该节点即可。
3. 如果要删除的节点只有一个子节点,将该节点的子节点替换该节点即可。
4. 如果要删除的节点有两个子节点,需要找到该节点右子树中的最小节点,将该节点的值赋给要删除的节点,然后删除该最小节点。
下面是C语言删除二叉排序树节点的代码实现:
```c
void deleteNode(Tree **root, int data) {
if (*root == NULL) return;
if (data < (*root)->data) {
deleteNode(&((*root)->left), data);
} else if (data > (*root)->data) {
deleteNode(&((*root)->right), data);
} else {
if ((*root)->left == NULL && (*root)->right == NULL) {
free(*root);
*root = NULL;
} else if ((*root)->left == NULL) {
Tree *temp = *root;
*root = (*root)->right;
free(temp);
} else if ((*root)->right == NULL) {
Tree *temp = *root;
*root = (*root)->left;
free(temp);
} else {
Tree *temp = minValueOfBinaryTree((*root)->right);
(*root)->data = temp->data;
deleteNode(&((*root)->right), temp->data);
}
}
}
```
阅读全文