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