红黑树构建

65 阅读2分钟

假如把1-100个树放到一维数组里,要找到100需要循环100次。如果是红黑树只需要循环6次就能找到目标。当然也可以对数组进行排序算法,比如二分查找啥的,也是有不错的效果,但是这里是用红黑树这种数据结构来替换数组结构。

红黑树的规则:

  1. 跟节点为黑节点
  2. 红节点的父节点或红节点的孩子节点不能为红节点
  3. 从跟节点到最后一个节点路径长度一致

如上图,50和20为相邻的红节点,破坏了红黑树规则,需要调整;并且跟节点到最后一个节点的路径不相同,红节点不计算在内,左边为2的长度,右边为3的长度,破坏红红黑树规则

其实就只有两种类型需要调整

如图四种破坏红黑树规则,LL,LR,RR,RL型,只需要把这三个节点变为三个节点的满二叉树,如何把子节点变红就可以;

这里省略了空节点,每条路径都是1,符合红黑树特性。

这里就是常说的左旋和右旋,说左旋右旋很多人会迷糊,我自己学的时候没管啥左右旋,只需要变换为上图的结构就行

不过这里还需要把后续节点连接上;

R1-R4节点可以有,没有就是空节点

还有一种类型

如图,右相邻红节点,破坏红黑树规则,需要修改

只需要将中间节点变黑,首位节点变红就可以,长度都为1

把300, 200, 600, 100, 250, 400, 1000, 50, 150, 225, 275, 25, 125, 900数字依次添加,但是添加都是红节点

添加到最后路径都是3,符合规则