二叉排序树和平衡二叉树(哈喜老师)

1.二叉排序树

1.1:二叉排序树的概念

1.2:与二叉排序树的相关的操作

1.2.1:求平均查找长度

1.2.2:查找某个元素

代码 (不重要)
cpp 复制代码
// 代码不重要,重要的是要明白查找某个元素的过程
// 二叉排序树(BST)的查找函数
// 参数:T 是二叉排序树根节点,key 是要查找的关键字(元素)
// 返回值:找到则返回对应节点指针,没找到则返回 NULL
BSTNode *BST_Search (BiTree T, ElemType key) {
    // 循环条件:树不为空 且 还没找到目标关键字
    while (T != NULL && key != T->data) {
        if (key < T->data)
            T = T->lchild;    // 关键字 < 当前节点值 → 去左子树查找
        else
            T = T->rchild;    // 关键字 > 当前节点值 → 去右子树查找
    }
    // 退出循环:要么找到节点,返回该节点的地址,要么T=NULL(查找失败)
    return T;
}

1.2.3:在二叉排序树中插入元素

代码 (不重要)
cpp 复制代码
// 代码不重要,重要的是要明白插入某个元素的过程
// 二叉排序树的插入函数(递归实现)
// 参数:&T 为二叉排序树根节点的引用,k 为待插入的关键字
// 返回值:插入成功返回 1,失败(关键字已存在)返回 0
int BST_Insert(BiTree &T, KeyType k) {
    // 情况1:当前子树为空,找到插入位置
    if (T == NULL) {
        // 为新节点分配内存空间
        T = (BiTree)malloc(sizeof(BSTNode));
        // 将关键字存入新节点
        T->data = k;
        // 新节点为叶子节点,左右孩子初始化为空
        T->lchild = T->rchild = NULL;
        return 1;    // 插入成功,返回1
    }
    // 情况2:树中已存在相同关键字的节点,不允许重复插入
    else if (k == T->data) {
        return 0;    // 插入失败,返回0
    }
    // 情况3:待插入关键字小于当前节点值,递归插入到左子树
    else if (k < T->data) {
        return BST_Insert(T->lchild, k);
    }
    // 情况4:待插入关键字大于当前节点值,递归插入到右子树
    else {
        return BST_Insert(T->rchild, k);
    }
}
例题:

1.2.4:删除二叉排序树中的某个元素 (这里听王道的课,知识点不常考)

习题1:(易)
习题2:(难)
相关推荐
刘马想放假6 小时前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
北域码匠1 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
Darling噜啦啦8 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠9 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾9 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres8219 天前
算法复键——树状数组
数据结构·算法
酉鬼女又兒9 天前
零基础入门计算机网络运输层:端到端通信核心作用、端口号分类规则、复用分用工作机制及UDP与TCP协议全方位对比详解
网络·网络协议·tcp/ip·计算机网络·考研·udp·php
牛油果子哥q9 天前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒9 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
WL学习笔记9 天前
单项不带头不循环链表
数据结构·链表