红黑树
来源:互联网 发布:白衬衫 知乎 编辑:程序博客网 时间:2024/06/03 16:55
简单的介绍下红黑树?
a. 红黑树是一种平衡二叉查找树(简称平衡树,常见的平衡树有AVL,红黑树。AVL树的性质为:每个结点的左右子树的高度之差的绝对值最多为1。)
//add: 如果再问你什么是平衡树,回答:最大深度不大于log(n),n是树的节点个数。
b. Java集合中的TreeSet和TreeMap,C++ STL中的set、map,以及Linux虚拟内存的管理,都是通过红黑树去实现的。
//add1:为啥TreeSet和TreeMap不用其他平衡树,比如AVL? 答:虽然红黑树操作的复杂度和AVL是相同的,但是红黑树从不平衡调整到平衡所需操作更少,统计性能更优。 //add2:TreeSet和HashSet的比较? 答:1) TreeSet是用红黑树实现的,操作复杂度O(log(n)),HashSet使用哈希+拉链去冲突法实现的,平均操作复杂度O(1)。所以一般查找HashSet更快。 2) TreeSet因为是红黑树,本质是一颗二叉排序树,所以元素是排好序的。同时也需要使用Comparator接口,实现 compare方法。(不写的话会使用默认的,没有默认就会抛异常) HashSet则需要重写该对象对应类的equals方法和hashCode()方法(不写的话也会使用默认的)。 3) HashSet可以放入null,但只能放入一个null。TreeSet不能放入null。(TreeSet需要排序,你怎么和一个null比较大小)
c. 红黑树的各项操作(插入、删除、查找等)复杂度都为log(n)
d. 红黑树的五大特征
1)节点要么为红色,要么为黑色。(不然为啥叫红黑树;)) 2)根节点为黑色。 3)叶子节点为黑色。 (这两个简直送分,最上面和最下面都是黑的) 4)每个红色节点的左右孩子都是黑色。 (保证了从根节点到叶子节点不会出现连续两个红色节点) 5)从任意节点到其每个叶子节点的所有路径,都包含相同数目的黑色节点。(4,5是使得红黑树为平衡树的关键)
阅读全文
0 0
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- Android之设计模式六大原则
- JEESZ-Redis分布式缓存安装和使用
- java实现类的封装(物体实现椭圆运动)
- Chapter 2
- Python创建模块并导入
- 红黑树
- 开源项目一分钟使用Material Desgin
- 用户认证LDAP部署 + 10.04部分
- 如何将spring boot工程打成JAR包到服务器上运行
- java将异常输出到日志
- 如何解决65535问题
- 数据库事务隔离级别-- 脏读、幻读、不可重复读(清晰解释)
- Kolakoski序列生成遇到的问题及调试过程
- ubuntu 10.04下安装LDAP服务器