HashMap 在Jdk1.8 以后 在链表长度超过8以后 把连接转换成 红黑树了
原因: 红黑树 效率更高效
特殊情况 : 二叉树 退化成链表了 左右两端不平衡,那么此时 二叉树的查询时间 和 链表一样都是O(n)
一 平衡二叉树 为了 避免 二叉树退化成链表的极端情况
即使元素很多,二叉树的深度 【根节点到子节点的最远距离 】也只有五层
查找 二叉树的任一元素 通过二分法 最多查找五次就确定了。从而 一颗二叉树 查找效率是和树的高度有关系的。
而平衡二叉树 就是通过某种方式,来保证 一个二叉树 不会退化成链表;
判断平衡被破坏: 通过左右2个子节点的高度差 来看的 差>1 表明不平衡
平衡二叉树的处理方案: 旋转
多元素处理:
这时是平衡状态 左侧高度是2 右侧是1 高度差是1 平衡
如果再添加一个元素的话:
操作后:
二 红黑树 是不是平衡二叉树?
严格意义上 不是平衡二叉树,它不能保证 左右节点高度差不能超过1 ,因为平衡二叉树 获得平衡 很容易触发旋转的操作,,红黑树为了获得比平衡二叉树,更高的插入和删除的效率,在维持树的平衡上 做出了一定的取舍,从而在整体性能【因为查询上不一定优于平衡二叉树】上是优于 平衡二叉树的。