写一个二叉树删除结点算法
时间: 2023-05-23 21:04:04 浏览: 95
好的,以下是一个二叉树删除结点的算法:
void deleteNode(node *root, int key) {
if (root == NULL) return;
if (key < root->data)
root->left = deleteNode(root->left, key);
else if (key > root->data)
root->right = deleteNode(root->right, key);
else {
if (root->left == NULL) {
node *temp = root->right;
free(root);
return temp;
}
else if (root->right == NULL) {
node *temp = root->left;
free(root);
return temp;
}
node* temp = minValueNode(root->right);
root->data = temp->data;
root->right = deleteNode(root->right, temp->data);
}
return root;
}
其中,node 是二叉树的结构体,data 是结点的值,left 和 right 分别表示结点的左右子树。这个算法的核心思想是,先找到要删除的结点,然后分三种情况处理它:左子树为空、右子树为空、左右子树都不为空。具体的处理方式可以看代码实现。
希望我的回答能够帮到你!
阅读全文