数据结构——二叉排序树

懒猫老师-数据结构-(58)二叉排序树的删除(二叉查找树)_哔哩哔哩_bilibili

概念

(1)若它的左子树不空,则左子树上所有结点的值均小于根结点的值;

(2)若它的右子树不空,则右子树上所有结点的值均大于根结点的值;

(3)它的左右子树也都是二叉排序树。

通过递归的方法来定义

中序遍历二叉排序树可以得到一个按关键码有序的序列。

操作

创建二叉树

// 定义二叉查找树的节点  
typedef struct Node {  
    int key;  
    struct Node* left;  
    struct Node* right;  
} Node;  
  

插入操作

Node* insert(Node* node, int key) {  
    if (node == NULL) return newNode(key);  
  
    if (key < node->key) {  
        node->left = insert(node->left, key);  
    } else if (key > node->key) {  
        node->right = insert(node->right, key);  
    } 
    return node;  
}  

也可用循环进行多次插入

查找操作

// 查找特定键值  
Node* search(Node* root, int key) {  
    if (root == NULL) {  
        return NULL;  
    }  
  
    if (key == root->key) {  
        return root;  
    }  
  
    if (key < root->key) {  
        return search(root->left, key);  
    }  
  
    return search(root->right, key);  
}  
  

删除操作(重要)

1、删除节点为叶子结点

直接删除

2、被删除的节点只有左子树或只有右子树

3、被删除的节点既有左子树又有右子树

以左子树中最大的节点或右子树中最小的节点替代被删除的节点

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-09 12:48:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-09 12:48:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-09 12:48:06       87 阅读
  4. Python语言-面向对象

    2024-05-09 12:48:06       96 阅读

热门阅读

  1. 【数据结构和算法】--链表

    2024-05-09 12:48:06       36 阅读
  2. websocket

    websocket

    2024-05-09 12:48:06      31 阅读
  3. vue触发原生form提交到指定action地址

    2024-05-09 12:48:06       31 阅读
  4. c++中constexpr的一个用法——在泛型编程中的作用

    2024-05-09 12:48:06       33 阅读
  5. docker 部署并运行一个微服务

    2024-05-09 12:48:06       34 阅读
  6. Stylus:深入解析与实战引入

    2024-05-09 12:48:06       37 阅读
  7. 【Leetcode 每日一题】26. 删除有序数组中的重复项

    2024-05-09 12:48:06       32 阅读
  8. qt day 3

    qt day 3

    2024-05-09 12:48:06      30 阅读
  9. Android中gradle.properties 和 gradle-wrapper.properties 作用

    2024-05-09 12:48:06       36 阅读