红黑树其实算是一种特殊的二叉查找树,二叉正常的时候时间复杂度为O(logN),但是当它出现链表情况的时候,会不一样,查询链表数据时间复杂度会变为O(N);
红黑树通过几个特性,基本规避了二叉查找树出现链表的情况,也就是说,红黑树基本上就是不会出现链表的二叉查找树。
红黑色的特性,必须满足:
根节点必须是黑色,无父节点;
红色节点不可以连到一条线;
叶子节点必须是黑色,即最下层,NIL
从任一节点出发到其每个叶子节点的路径,黑色节点的数量必须相等
特点:
当你存入数据,删除数据的时候,树的结构就会产生变化,可能会变得不满足红黑树的特性;
然后红黑树可以根据变换颜色,左旋右旋,使结构变得满足红黑树的特性,即增删后,通过各种变换,自动变的符合;
下面有个不错的例子,可以通过例子自行体会;
目的,插入一个新的数6,(变换规则:插入的新数据默认为红色),即插入后,变为图1,两个红色,不符合,
通过变换颜色:(父节点,叔节点皆为红色)将父节点,叔节点都变为黑色,祖父节点改为红色;
此时,祖父节点(12)和大祖父节(5)点都为红,不符合,还得变换,
此时情况:以祖父节点(12)为当前节点,12的父节点(红色)和叔节点(黑色),出现这种情况,可以使用左旋或右旋:
进行左旋(因为当前节点是右节点):将12移到5的位置,5和1下移,7改连到5上,7下面的不变:
变为图3,此时还是不符合,继续右旋(因为当前节点为5,且为左节点,父节点为红色,叔节点为黑):
1将父节点12变为黑色,
2祖父节点19变为红色,
3以祖父节点19作为旋转点
步骤一样,12上移,19下移,13重新指向19;即为最终图4;
此时满足红黑树的特性,转换完成!