Java源码集合类TreeMap学习1——数据结构5红黑树

来源:互联网 发布:centos快照 编辑:程序博客网 时间:2024/05/17 01:36

红黑树本质上一棵平衡二叉树。

参考:https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/03.01.md

为什么有了平衡二叉树还会出现红黑树呢?

排序二叉树虽然可以快速检索,但在最坏的情况下:如果插入的节点集本身就是有序的,要么是由小到大排列,要么是由大到小排列,那么最后得到的排序二叉树将变成链表:所有节点只有左节点(如果插入节点集本身是大到小排列);或所有节点只有右节点(如果插入节点集本身是小到大排列)。在这种情况下,排序二叉树就变成了普通链表,其检索效率就会很差。当插入节点本身就是由小到大排列时,排序二叉树将变成一个链表,这种排序二叉树的检索性能最低:N 个节点的二叉树深度就是 N-1。

红黑树的高度不会无限增高,这样保证红黑树在最坏情况下都是高效的,不会出现普通排序二叉树的情况。由于红黑树只是一个特殊的排序二叉树,因此对红黑树上的只读操作与普通排序二叉树上的只读操作完全相同,只是红黑树保持了大致平衡,因此检索性能比排序二叉树要好很多。

通过分析 JDK 源代码研究 TreeMap 红黑树算法实现:https://www.ibm.com/developerworks/cn/java/j-lo-tree/index.html?ca=drs-

红黑树的java代码实现:http://www.jianshu.com/p/30ab2a7fa5a3

红黑树从头至尾插入和删除结点的全程演示图:http://blog.csdn.net/v_JULY_v/article/details/6284050



阅读全文
0 0
原创粉丝点击