什么是红黑树?

要了解红黑树,首先要了解二叉查找树
1.二叉查找树的特点:

  1. 左子树上所有结点值均小于等于根节点;
  2. 右子树上所有结点值均大于等于根节点;
  3. 左右子树都是一棵二叉排序树.

这种数据结构的好处是每次查找的次数最多是二叉查找树的高度.

在插入结点时,也是按照二叉树特点进行插入的,但是在插入的时候会遇到如下图的问题:
近乎线性的结构,降低了查找的性能.
在这里插入图片描述
为了解决这个问题,红黑树应运而生!

2.红黑树的五个规则:

  1. 结点是红色或黑色的;
  2. 根节点是黑色的;
  3. 每个结点的叶子结点都是黑色的空节点;
  4. 每个红色结点的两个子节点都是黑色的,每个叶子结点到根节点的路径上不能有两个连续的红色结点;
  5. 任意结点到它的每个叶子结点路径上的黑色结点是一样多的.

由于以上五个规则保证了红黑树的自平衡特性,这样使得红黑树从根节点到叶子结点的最长路径不会超过最短路径的两倍长.

当插入或删除结点时,红黑树的五个规则就会被打破,这时候就需要我们做出一定的调整.

3.调整的方法有两种:变色和旋转(旋转分为左旋转和右旋转)
左旋转:逆时针旋转两个节点,父节点被右孩子取代,而自己成了左孩子.
右旋转:顺时针旋转两个节点,父节点被左孩子取代,而自己成了右孩子.

4.红黑树的应用:
在JDK的集合类中TreeSet和TreeMap的底层就是用红黑树实现的.
在Java 8 中 HashMap 也用到了红黑树来处理哈希冲突.

红黑树的调整过程很复杂,这里主要学会理解红黑树的自平衡机制.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值