当前位置: 首页 > news >正文

Java基础系列-HashMap源码解析1-BST树

文章目录

  • 二叉搜索树(BST)
    • 引入
    • 查找5
    • 插入9
    • 极端情况
    • 删除
      • 删除叶节点 10
      • 删除节点只有左子树或只有右子树
      • 删除节点既有左子树又有右子树
      • 为什么这么代替?

提到HashMap,就不得不提红黑树(HashMap1.8之后),所以我们先来了解红黑树这个数据结构。但是在学习红黑树之前,又不得不提红黑树的由来。因此,让我们从二叉树搜索树开始,循序渐进理解HashMap原理。

二叉搜索树(BST)

引入

针对有序数组的存储,查找(二分查找)的效率可以达到O(log2n), 但是插入和删除操作因为需要挪动后面所有的元素,所以时间复杂度是O(n)。

由此引入我们的二叉搜索树,即BST树。
在这里插入图片描述左 < 根 < 右
中序遍历: 从小到大

查找5

在这里插入图片描述
查找效率取决于树的高度,O(log2n)

插入9

在这里插入图片描述插入效率也取决于树的高度,O(log2n)

极端情况

退化成链表
在这里插入图片描述

删除

删除叶节点 10

在这里插入图片描述
直接删除

删除节点只有左子树或只有右子树

在这里插入图片描述

删除节点既有左子树又有右子树

如删除根节点9, 拿左子树中最大的节点7代替9 ,然后删除 7
在这里插入图片描述
或者找到右子树中最小的节点10,用10代替9,删除10
在这里插入图片描述

为什么这么代替?

从中序遍历来看7 9 10 三个数的位置,用7 或 10 代替9 并不会影响BST树的性质。
在这里插入图片描述

http://www.xdnf.cn/news/107713.html

相关文章:

  • 深入剖析PHP反弹Shell:OSCP场景下的实现、原理与优化
  • 深入理解IP地址、端口号、字节序及其应用
  • 困局与破局:当传统校园能源管理遭遇“散沙式“能耗困局
  • Python图形界面编程(一)
  • HTML表格居中显示、在表格中插入音频文件、表格分行列显示
  • SpringBoot入门实战(第七篇:项目接口-商品管理)
  • 考研单词笔记 2025.04.23
  • es的range失效
  • 如何在Spring Boot中实现热加载以避免重启服务器
  • 数据治理体系的“三驾马车”:质量、安全与价值挖掘
  • 武汉昊衡科技OLI光纤微裂纹检测仪:高密度光器件的精准守护者
  • JavaWeb学习打卡-Day2-Mysql索引、事务
  • 浅试MCP:spring ai使用mcp调用deepseek的API接口
  • IDEA中Quarkus框架(3.13版本)容器编排、压测与调优、注意事项等
  • element-ui transfer 组件源码分享
  • 永磁同步电机控制算法--零d轴电流IF控制
  • 幂等性设计保障系统可靠性和数据一致性
  • 顺序表专题
  • 结合地理数据处理
  • 数据流量采集系统的实现
  • 为什么Spring中@Bean注解默认创建单例Bean
  • TORL:解锁大模型推理新境界,强化学习与工具融合的创新变革
  • 将 MySQL 8 主从复制延迟优化到极致
  • cgdb的基础使用教程
  • 制造业数字化转型标杆解析:从冀凯机电到君乐宝的启示
  • Java类加载器(ClassLoader)及其相关类 简介
  • 【C++】AVL树
  • 《从卷积核到数字解码:CNN 手写数字识别实战解析》
  • 蚊子的搜索距离可达60公里:对一些特殊气味有所偏爱
  • 短说社区V5.2.1正式版发布|修复已知问题