点击蓝字
关注我们
因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享
来源于网络,侵删
二叉查找树(Binary Search Tree,BST)是一种常用的二叉树,它的每个结点最多有两个子结点,且左子结点的值小于父结点的值,右子结点的值大于父结点的值。BST的主要特点是可以在O(log n)的时间内查找、插入和删除元素。
C语言可以通过定义一个结构体来表示BST的结点,例如:
struct node {
int val; // 存储结点的值
struct node *left; // 指向左子结点的指针
struct node *right; // 指向右子结点的指针
};
对于BST的插入操作,可以定义一个递归函数来实现:
struct node *insert(struct node *root, int val) {
if (root == NULL) { // 如果树为空,创建一个新的结点
struct node *new_node = (struct node *)malloc(sizeof(struct node));
new_node->val = val;
new_node->left = new_node->right = NULL;
return new_node;
}
if (val < root->val) // 如果插入的值比当前结点小,插入到左子树中
root->left = insert(root->left, val);
else if (val > root->val) // 如果插入的值比当前结点大,插入到右子树中
root->right = insert(root->right, val);
return root;
}
对于BST的查找操作,同样可以定义一个递归函数来实现:
struct node *search(struct node *root, int val) {
if (root == NULL || root->val == val) // 如果找到了结点或者树为空,则返回根结点
return root;
if (val < root->val) // 如果要查找的值比当前结点的值小,查找左子树
return search(root->left, val);
else // 否则查找右子树
return search(root->right, val);
}
对于BST的删除操作,需要考虑三种情况:
要删除的结点为叶子结点,直接删除即可。
要删除的结点只有一个子节点,将子节点提上来代替要删除的结点。
要删除的结点有两个子节点,需要找到其右子树的最小值结点替换要删除的结点,再删除右子树的最小值结点。
struct node *delete(struct node *root, int val) {
if (root == NULL) // 如果根节点为空,直接返回
return root;
if (val < root->val) // 如果要删除的值比当前结点的值小,在左子树中继续查找
root->left = delete(root->left, val);
else if (val > root->val) // 如果要删除的值比当前结点的值大,在右子树中继续查找
root->right = delete(root->right, val);
else {
if (root->left == NULL) { // 如果要删除的结点只有右子节点或没有子节点,直接删除
struct node *temp = root->right;
free(root);
return temp;
} else if (root->right == NULL) { // 如果要删除的结点只有左子节点,直接删除
struct node *temp = root->left;
free(root);
return temp;
} else { // 如果要删除的结点有两个子节点,找到其右子树的最小值结点替换要删除的结点,再删除右子树的最小值结点
struct node *temp = find_min(root->right);
root->val = temp->val;
root->right = delete(root->right, temp->val);
}
}
return root;
}
struct node *find_min(struct node *root) {
while (root->left != NULL)
root = root->left;
return root;
}
如果你年满18周岁以上,又觉得学【C语言】太难?想尝试其他编程语言,那么我推荐你学Python,现有价值499元Python零基础课程限时免费领取,限10个名额!
▲扫描二维码-免费领取
推荐阅读
点击 阅读原文 了解更多