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树的性质。
 
