网站域名需icp备案吗,成都网站建设公司思乐科技,番禺人才市场档案中心,网站建设什么代码最简单红黑树介绍
红黑树#xff08;Red Black Tree#xff09;是一种自平衡二叉查找树。由于其自平衡的特性#xff0c;保证了最坏情形下在 O(logn) 时间复杂度内完成查找、增加、删除等操作#xff0c;性能表现稳定。
在 JDK 中#xff0c;TreeMap、TreeSet 以及 JDK1.8 的 …红黑树介绍
红黑树Red Black Tree是一种自平衡二叉查找树。由于其自平衡的特性保证了最坏情形下在 O(logn) 时间复杂度内完成查找、增加、删除等操作性能表现稳定。
在 JDK 中TreeMap、TreeSet 以及 JDK1.8 的 HashMap 底层都用到了红黑树。
为什么需要红黑树
红黑树的诞生就是为了解决二叉查找树的缺陷。
二叉查找树是一种基于比较的数据结构它的每个节点都有一个键值而且左子节点的键值小于父节点的键值右子节点的键值大于父节点的键值。这样的结构可以方便地进行查找、插入和删除操作因为只需要比较节点的键值就可以确定目标节点的位置。
但是二叉查找树有一个很大的问题就是它的形状取决于节点插入的顺序。如果节点是按照升序或降序的方式插入的那么二叉查找树就会退化成一个线性结构也就是一个链表。这样的情况下二叉查找树的性能就会大大降低时间复杂度就会从 O(logn) 变为 O(n)。
红黑树的诞生就是为了解决二叉查找树的缺陷因为二叉查找树在某些情况下会退化成一个线性结构。
红黑树特点
每个节点非红即黑。黑色决定平衡红色不决定平衡。根节点总是黑色的。每个叶子节点都是黑色的空节点也就是 NIL 节点。这里指的是红黑树都会有一个空的叶子节点是红黑树自己的规则。如果节点是红色的则它的子节点必须是黑色的反之不一定。通常这条规则也叫不会有连续的红色节点。一个节点最多临时会有 3 个节点中间是黑色节点左右是红色节点。从任意节点出发沿着这个节点到达其所有叶子节点的路径上经过的黑色节点的数量必须相同。每一层都只是有一个节点贡献了树高决定平衡性也就是对应红黑树中的黑色节点。
正是这些特点才保证了红黑树的平衡让红黑树的高度不会超过 2log(n1)。
红黑树数据结构
建立在 BST 二叉搜索树的基础上AVL、2-3 树、红黑树都是自平衡二叉树统称 B-树。但相比于 AVL 树高度平衡所带来的时间复杂度红黑树对平衡的控制要宽松一些红黑树只需要保证黑色节点平衡即可。
红黑树结构实现
public class Node {public Class? clazz;public Integer value;public Node parent;public Node left;public Node right;// AVL 树所需属性public int height;// 红黑树所需属性public Color color Color.RED;}1.左倾染色 染色时根据当前节点的爷爷节点找到当前节点的叔叔节点。再把父节点染黑、叔叔节点染黑爷爷节点染红。但爷爷节点染红是临时的当平衡树高操作后会把根节点染黑。
2.右倾染色 3.左旋调衡
一次左旋 右旋左旋 4.右旋调衡
一次右旋 左旋右旋