红黑树
定义
节点是红色或黑色根结点一定是黑色所有叶子节点都是黑色(指的是null)每个红色节点的两个子节点都是黑色(从每个叶子到根的所有路径上不能有两个连续的红色节点)从任意节点到其每个叶子节点的所有路径都包含相同数目的黑色节点时间复杂度
[O(lgn)]
性质
从根到叶子的最长的可能路径不多于最短的可能路径的两倍长(2k - 1)
插入
注:插入的节点颜色一开始都默认是红色
注:选择插入的位置和二叉搜索树的插入是一样的(删除也和二叉搜索树一样)
被插入的节点是根节点
直接把此节点变为黑色被插入的节点的父节点是黑色
什么也不需要做被插入的父节点是红节点
当前节点的祖父节点的另一个子节点(叔叔节点–父节点的父节点的另一个子节点)也是红色
将父节点变为黑色将叔叔节点变为黑色祖父节点变为红色祖父节点变为当前节点,继续往上递归即可叔叔节点是黑色,并且当前节点是父亲节点的右儿子
将父节点作为新的当前节点以新的当前节点为支点进行左旋叔叔节点是黑色,且当前节点是父节点的左孩子
将父节点变成黑色将祖父节点变成红色以祖父节点为支点进行右旋删除
补充:二叉搜索树删除–当左右节点都非空时
找到该节点的右子树中的最左节点(也就是右子树中序遍历的第一个节点)把它们的值和要删除的节点的值进行交换然后删除这个节点即相当于把我们想删除的节点删除了(方法可以转换成只有左节点或只有右节点或是叶子节点的情况)前情提要
红+黑和黑+黑是指,当一个红节点或黑色节点被删除后,为了是的红黑树性质五不被破坏,会将其颜色保留加到上一个节点以维护性质五。删除的是红色点时无需做任何操作删除的是黑色点时,将子节点上移并变成红+黑或黑+黑1. x指向一个红+黑节点
将x设为一个黑节点即可
2. x指向根
将x设为一个黑节点即可
3.1 x的兄弟节点是红色
将x的兄弟节点设为黑色将x的父节点设为红色对x的父节点进行左放左旋后,重新设置x的兄弟节点3.2 x的兄弟节点是黑色,x的兄弟节点的两个孩子都是黑色
将x的兄弟节点设为红色(将兄弟节点变为红色)设置x的父节点为新的x节点(将处理的节点往上移一层)3.3 x的兄弟节点是黑色,x的兄弟节点的左孩子是红色,右孩子是黑色的
将x兄弟节点的左孩子设为黑色将x兄弟节点设为红色对x的兄弟节点进行右旋右旋后,重新设置x的兄弟节点3.4 x的兄弟节点是黑色,x的兄弟节点的右孩子是红色的,x的兄弟节点的左孩子任意颜色
将x父节点颜色赋值给x的兄弟节点将x父节点设为黑色将x兄弟节点的右子节点设为黑色对x的父节点进行左旋(旋转后即可从黑+黑变为黑色)如果觉得《详细介绍红黑树 性质 定义 插入删除操作》对你有帮助,请点赞、收藏,并留下你的观点哦!