数据结构-红黑树插入结点示例
1、红黑树简介
红黑树(Red Black Tree)是一种特定类型的二叉树,它是在计算机科学中用来组织数据比如数字的块的一种结构。
红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被Leo J.Guibas和Robert Sedgewick修改为如今的“红黑树”。
红黑树是一种平衡二叉查找树的变体,它的左右子树高差有可能大于 1<所以红黑树不是严格意义上的平衡二叉树(AVL),但对之进行平衡的代价较低,其平均统计性能要强于 AVL 。
------粘百度百科
2、在线可视化生成红黑树工具
网址是:https://www.cs.usfca.edu/~galles/visualization/RedBlack.html
3、红黑树插入结点性质和规则
3.1、红黑树插入结点性质
一颗红黑树是满足如下红黑性质的二叉排序树:
1、每个结点或是红色,或是黑色的;
2、根结点是黑色的;
3、叶结点(虚构的外部结点、NULL结点)都是黑色的 ;
4、不存在两个相邻的红结点(即红结点的父结点和孩子结点均是黑色的);
5、对每个结点,从该结点到任一叶结点的简单路径上,所含黑结点的数量相同。
3.2、红黑树插入结点规则
红黑树插入结点的规则总结如下图3-1所示(验证总结的,若有哪里不对,请指出):
4、红黑树插入结点示例
4.1、红黑树插入结点示例(带有过程描述)
下面展示具体例子,关键字序列为:89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674。【不看过程的话,直接跳转到:4.2、红黑树删除示例(不带过程截图)即可】。
1、新插入红黑树的结点初始着为红色,插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第1个,构建过程截图和在线可视化工具结果截图如图4-1和图4-2所示。
图中步骤①,新插入结点"89"初始时为红色,根据红黑树插入结点性质2【红黑树根结点是黑色】,所以"89"更新为黑色。
2、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第2个,构建过程截图和在线可视化工具结果截图如图4-3和图4-4所示。
图中步骤①,新插入结点"79"初始时为红色,根据红黑树插入结点规则③【当前待插入结点"79"的父结点"89"是黑色,直接插入当前结点"79"】
3、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第3个,构建过程截图和在线可视化工具结果截图如图4-5和图4-6所示。
方法一:
图中步骤①,新插入结点"82"初始时为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】;再根据红黑树插入结点性质3【虚构的外部结点都是黑色的】,即"82"结点的叔叔结点为黑色;故根据红黑树插入结点规则②【旋转】,由于79>82,所以先左旋。
图中步骤②,82<89,所以右旋,根据红黑树插入结点规则②【变色(后旋转的结点各取反色)】,82和89是后旋转的,所以结点82和结点89颜色取反。
方法二和方法三直接跳转到:"4.1.1、带有过程描述-补充-两种不旋转的方法"即可】。
4、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第4个,构建过程截图和在线可视化工具结果截图如图4-7和图4-8所示。
图中步骤①,新插入结点"50"初始时为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】;再根据红黑树插入结点规则①【叔叔结点+父亲结点+爷爷结点各取反色】,所以结点89、79、82均取反颜色。
图中步骤②,根据红黑树插入结点规则①【爷爷结点检查更新】,再根据红黑树插入结点性质2【红黑树根结点是黑色】,所以"82"更新为黑色。
5、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第5个,构建过程截图和在线可视化工具结果截图如图4-9和图4-10所示。
方法一:
图中步骤①,新插入结点"13"初始时为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】;再根据红黑树插入结点性质3【虚构的外部结点都是黑色的】,即"13"结点的叔叔结点为黑色;故根据红黑树插入结点规则②【旋转】,由于50<79,故右旋。
图中步骤②,根据红黑树插入结点规则②【变色(后旋转的结点各取反色)】,50和79是旋转的,所以结点50和结点79颜色取反。
方法二和方法三直接跳转到:"4.1.1、带有过程描述-补充-两种不旋转的方法"即可】。
6、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第6个,构建过程截图和在线可视化工具结果截图如图4-11和图4-12所示。
图中步骤①,新插入结点"3"初始时为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】;再根据红黑树插入结点规则①【叔叔结点+父亲结点+爷爷结点各取反色】,所以结点79、13、50均取反颜色。
根据红黑树插入结点规则①【爷爷结点检查更新】,但是取反色后的红黑树不需要任何调整,故不变。
7、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第7个,构建过程截图和在线可视化工具结果截图如图4-13和图4-14所示。
图中步骤①,新插入结点"17"初始时为红色,根据红黑树插入结点规则③【当前待插入结点"17"的父结点"13"是黑色,直接插入当前结点"17"】
8、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第8个,构建过程截图和在线可视化工具结果截图如图4-15和图4-16所示。
方法一:
图中步骤①,新插入结点"18"初始时为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】;再根据红黑树插入结点规则①【叔叔结点+父亲结点+爷爷结点各取反色】,所以结点3、17、13均取反颜色。
图中步骤②,根据红黑树插入结点规则①【爷爷结点检查更新(查看爷爷结点的叔叔结点颜色后循环更新)】,爷爷结点"13"和结点"50"均为红色,而爷爷结点"13"的叔叔结点"89"为黑色,故根据红黑树插入结点规则②【旋转】,由于50<82,故右旋。
图中步骤③,根据红黑树插入结点规则②【变色(后旋转的结点各取反色)】,50和82是旋转的,所以结点50和结点82颜色取反。
步骤②+③的简化方法二和方法三直接跳转到:"4.1.1、带有过程描述-补充-两种不旋转的方法"即可】。
9、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第9个,构建过程截图和在线可视化工具结果截图如图4-17和图4-18所示。
图中步骤①,新插入结点"14"初始时为红色,根据红黑树插入结点规则③【当前待插入结点"14"的父结点"17"是黑色,直接插入当前结点"14"】
10、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第10个,构建过程截图和在线可视化工具结果截图如图4-19和图4-20所示。
图中步骤①,新插入结点"15"初始时为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】;再根据红黑树插入结点规则①【叔叔结点+父亲结点+爷爷结点各取反色】,所以结点18、14、17均取反颜色。
图中步骤②,根据红黑树插入结点规则①【爷爷结点检查更新(查看爷爷结点的叔叔结点颜色后循环更新)】,爷爷结点"17"和结点"13"均为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】,而爷爷结点"17"的叔叔结点"82"为红色,故根据红黑树插入结点规则①【叔叔结点+父亲结点+爷爷结点各取反色】,所以结点82、13、50均取反颜色。
图中步骤③,根据红黑树插入结点规则①【爷爷结点检查更新】,再根据红黑树插入结点性质2【红黑树根结点是黑色】,所以"50"更新为黑色。
11、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第11个,构建过程截图和在线可视化工具结果截图如图4-21和图4-22所示。
图中步骤①,新插入结点"25"初始时为红色,根据红黑树插入结点规则③【当前待插入结点"25"的父结点"18"是黑色,直接插入当前结点"25"】
12、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第12个,构建过程截图和在线可视化工具结果截图如图4-23和图4-24所示。
方法一:
图中步骤①,新插入结点"20"初始时为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】;再根据红黑树插入结点性质3【虚构的外部结点都是黑色的】,即"20"结点的叔叔结点为黑色;故根据红黑树插入结点规则②【旋转】,由于25>20,故右旋。
图中步骤②,18<20,所以左旋,再根据红黑树插入结点规则②【变色(后旋转的结点各取反色)】,18和20是后旋转的,所以结点18和结点20颜色取反。
方法二和方法三直接跳转到:"4.1.1、带有过程描述-补充-两种不旋转的方法"即可】。
13、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第13个,构建过程截图和在线可视化工具结果截图如图4-25和图4-26所示。
方法一:
图中步骤①,新插入结点"36"初始时为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】;再根据红黑树插入结点规则①【叔叔结点+父亲结点+爷爷结点各取反色】,所以结点18、25、20均取反颜色。
图中步骤②,根据红黑树插入结点规则①【爷爷结点检查更新(查看爷爷结点的叔叔结点颜色后循环更新)】,爷爷结点"20"和结点"17"均为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】,而爷爷结点"20"的叔叔结点"3"为黑色,故根据红黑树插入结点规则②【旋转】,由于13>17,故左旋。
图中步骤③,根据红黑树插入结点规则②【变色(后旋转的结点各取反色)】,13和17是旋转的,所以结点13和结点17颜色取反。步骤②+③的简化方法二和方法三直接跳转到:"4.1.1、带有过程描述-补充-两种不旋转的方法"即可】。
14、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第14个,构建过程截图和在线可视化工具结果截图如图4-27和图4-28所示。
图中步骤①,新插入结点"95"初始时为红色,根据红黑树插入结点规则③【当前待插入结点"95"的父结点"89"是黑色,直接插入当前结点"95"】
15、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第15个,构建过程截图和在线可视化工具结果截图如图4-29和图4-30所示。
方法一:
图中步骤①,新插入结点"90"初始时为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】;再根据红黑树插入结点性质3【虚构的外部结点都是黑色的】,即"90"结点的叔叔结点为黑色;故根据红黑树插入结点规则②【旋转】,由于90<95,故右旋。
图中步骤②,89>90,所以左旋,再根据红黑树插入结点规则②【变色(后旋转的结点各取反色)】,89和90是后旋转的,所以结点89和结点90颜色取反。步骤①+②的简化方法二和方法三直接跳转到:"4.1.1、带有过程描述-补充-两种不旋转的方法"即可】。
16、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第16个,构建过程截图和在线可视化工具结果截图如图4-31和图4-32所示。
图中步骤①,新插入结点"265"初始时为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】;再根据红黑树插入结点规则①【叔叔结点+父亲结点+爷爷结点各取反色】,所以结点89、95、90均取反颜色。
根据红黑树插入结点规则①【爷爷结点检查更新】,但是取反色后的红黑树不需要任何调整,故不变。
17、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第17个,构建过程截图和在线可视化工具结果截图如图4-33和图4-34所示。
方法一:
图中步骤①,新插入结点"262"初始时为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】;再根据红黑树插入结点性质3【虚构的外部结点都是黑色的】,即"262"结点的叔叔结点为黑色;故根据红黑树插入结点规则②【旋转】,由于262<265,故右旋。
图中步骤②,262>95,所以左旋,再根据红黑树插入结点规则②【变色(后旋转的结点各取反色)】,262和95是后旋转的,所以结点262和结点95颜色取反。步骤①+②的简化方法二和方法三直接跳转到:"4.1.1、带有过程描述-补充-两种不旋转的方法"即可】。
18、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第18个,构建过程截图和在线可视化工具结果截图如图4-35和图4-36所示。
方法一:
图中步骤①,新插入结点"289"初始时为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】;再根据红黑树插入结点规则①【叔叔结点+父亲结点+爷爷结点各取反色】,所以结点95、265、262均取反颜色。
图中步骤②,根据红黑树插入结点规则①【爷爷结点检查更新(查看爷爷结点的叔叔结点颜色后循环更新)】,爷爷结点"262"和结点"90"均为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】,而爷爷结点"262"的叔叔结点"79"为黑色,故根据红黑树插入结点规则②【旋转】,由于90>82,故左旋。
图中步骤③,根据红黑树插入结点规则②【变色(后旋转的结点各取反色)】,90和82是旋转的,所以结点90和结点82颜色取反。
步骤②+③的简化方法二和方法三直接跳转到:"4.1.1、带有过程描述-补充-两种不旋转的方法"即可】。
19、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第19个,构建过程截图和在线可视化工具结果截图如图4-37和图4-38所示。
方法一:
图中步骤①,新插入结点"526"初始时为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】;再根据红黑树插入结点性质3【虚构的外部结点都是黑色的】,即"526"结点的叔叔结点为黑色;故根据红黑树插入结点规则②【旋转】,由于289>265,故左旋。
图中步骤②,根据红黑树插入结点规则②【变色(后旋转的结点各取反色)】,265和289是旋转的,所以结点265和结点289颜色取反。
方法二和方法三直接跳转到:"4.1.1、带有过程描述-补充-两种不旋转的方法"即可】。
20、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第20个,构建过程截图和在线可视化工具结果截图如图4-39和图4-40所示。
方法一:
图中步骤①,新插入结点"352"初始时为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】;再根据红黑树插入结点规则①【叔叔结点+父亲结点+爷爷结点各取反色】,所以结点265、526、289均取反颜色。
图中步骤②,根据红黑树插入结点规则①【爷爷结点检查更新(查看爷爷结点的叔叔结点颜色后循环更新)】,爷爷结点"289"和结点"262"均为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】,而爷爷结点"289"的叔叔结点"82"均为红色,故根据红黑树插入结点规则①【叔叔结点+父亲结点+爷爷结点各取反色】,所以结点82、262、90均取反颜色。
根据红黑树插入结点规则①【爷爷结点检查更新】,但是更新取反色后的红黑树不需要任何调整,故不变。
21、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第21个,构建过程截图和在线可视化工具结果截图如图4-41和图4-42所示。
方法一:
图中步骤①,新插入结点"365"初始时为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】;再根据红黑树插入结点性质3【虚构的外部结点都是黑色的】,即"365"结点的叔叔结点为黑色;故根据红黑树插入结点规则②【旋转】,由于365>352,故左旋。
图中步骤②,365<526,所以右旋,再根据红黑树插入结点规则②【变色(后旋转的结点各取反色)】,365和526是后旋转的,所以结点365和结点526颜色取反。
方法二和方法三直接跳转到:"4.1.1、带有过程描述-补充-两种不旋转的方法"即可】。
22、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第22个,构建过程截图和在线可视化工具结果截图如图4-43和图4-44所示。
方法一:
图中步骤①,新插入结点"360"初始时为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】;再根据红黑树插入结点规则①【叔叔结点+父亲结点+爷爷结点各取反色】,所以结点526、352、365均取反颜色。
图中步骤②,根据红黑树插入结点规则①【爷爷结点检查更新(查看爷爷结点的叔叔结点颜色后循环更新)】,爷爷结点"365"和结点"289"均为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】,而爷爷结点"365"的叔叔结点"95"为黑色,故根据红黑树插入结点规则②【旋转】,由于262>289,故左旋。
图中步骤③,根据红黑树插入结点规则②【变色(后旋转的结点各取反色)】,262和289是旋转的,所以结点262和结点289颜色取反。
步骤②+③的简化方法二和方法三直接跳转到:"4.1.1、带有过程描述-补充-两种不旋转的方法"即可】。
23、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第23个,构建过程截图和在线可视化工具结果截图如图4-45和图4-46所示。
图中步骤①,新插入结点"377"初始时为红色,根据红黑树插入结点规则③【当前待插入结点"377"的父结点"526"是黑色,直接插入当前结点"377"】
24、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第24个,构建过程截图和在线可视化工具结果截图如图4-47和图4-48所示。
方法一:
图中步骤①,新插入结点"522"初始时为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】;再根据红黑树插入结点性质3【虚构的外部结点都是黑色的】,即"522"结点的叔叔结点为黑色;故根据红黑树插入结点规则②【旋转】,由于522>377,故左旋。
图中步骤②,522<526,所以右旋,再根据红黑树插入结点规则②【变色(后旋转的结点各取反色)】,522和526是后旋转的,所以结点365和结点526颜色取反。
方法二和方法三直接跳转到:"4.1.1、带有过程描述-补充-两种不旋转的方法"即可】。
25、插入关键字序列(89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,674)中第25个,构建过程截图和在线可视化工具结果截图如图4-49和图4-50所示。
方法一:
图中步骤①,新插入结点"674"初始时为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】;再根据红黑树插入结点规则①【叔叔结点+父亲结点+爷爷结点各取反色】,所以结点377、526、522均取反颜色。
图中步骤②,根据红黑树插入结点规则①【爷爷结点检查更新(查看爷爷结点的叔叔结点颜色后循环更新)】,爷爷结点"522"和结点"365"均为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】,而爷爷结点"522"的叔叔结点"262"均为红色,故根据红黑树插入结点规则①【叔叔结点+父亲结点+爷爷结点各取反色】,所以结点262、365、289均取反颜色。
图中步骤③,根据红黑树插入结点规则①【爷爷结点检查更新(查看爷爷结点的叔叔结点颜色后循环更新)】,爷爷结点"289"和结点"90"均为红色,根据红黑树插入结点性质4【不存在两个相邻的红结点】,而爷爷结点"289"的叔叔结点"17"为黑色,故根据红黑树插入结点规则②【旋转】,由于90>50,故左旋。
图中步骤④,再根据红黑树插入结点规则②【变色(后旋转的结点各取反色)】,50和90是后旋转的,所以结点50和结点90颜色取反。
步骤③+④的简化方法二和方法三直接跳转到:"4.1.1、带有过程描述-补充-两种不旋转的方法"即可】。
4.1.1、带有过程描述-补充-两种不旋转的方法
其实红黑树插入结点规则③中旋转+变色,可以简化。
方法一:
遇到两个红色结点相连时的情况就只有四种,如下图4-51中的①、②、③、④所示;而最终转换所得就一种情况,如下图4-51中的⑤所示:
其中遇到①是肯定要先左旋变成②的,②之后右旋变成⑤;遇到③是肯定要先右旋变为④的,④之后左旋变成⑤。
从图中不难看出,三个结点中选取中间值作为双亲结点,另外两个结点各自作为左右结点。
对于LR或LL型,取反色的是标号为B、C的结点(也就是三个数值中较大的两个数);对于RL或RR型,取反色的是标号为A、C的结点(也就是三个数值中较小的两个数)。
对于LR或LL型,举例:
①、比如"4.2、红黑树删除示例(带有过程描述)"中的第3步(下图4-52所示),79<82<89,那么取反色的就是82和89(三个数值中较大的两个数)。
②、比如"4.2、红黑树删除示例(带有过程描述)"中的第8步(下图4-53所示),13<50<82,那么取反色的就是50和82(三个数值中较大的两个数)。不再逐个举例,都是这样操作。
对于RL或RR型,举例:
①、比如"4.2、红黑树删除示例(带有过程描述)"中的第12步(下图4-54所示),18<20<25,那么取反色的就是18和20(三个数值中较小的两个数)。
②、比如"4.2、红黑树删除示例(带有过程描述)"中的第13步(下图4-55所示),13<17<20,那么取反色的就是13和17(三个数值中较小的两个数)。不再逐个举例,都是这样操作。
方法二:
直接把三个结点(过程中所有图中虚线框)按照顺序排左结点、双亲结点、右结点,即最小的是左结点,中间值当作当前三个结点的双亲结点,最大的是右结点;之后三个结点中哪个结点发生变化了,那个结点的颜色就取反(注:以下变化之前说的双亲结点是最上层结点,下面两层的结点在左边就称为左结点,在右边就称为右结点,这个说法只是我自己这样称的,觉得不能接受这样称呼的可以不往下看了,看到这里就当作结束啦【不看过程的话,直接跳转到:4.2、红黑树删除示例(不带过程截图)即可】)。
举例:
①、比如"4.2、红黑树删除示例(带有过程描述)"中的第3步(下图4-56所示),当前插入结点82后,79<82<89,即79是82左结点,89是82右结点,82作为中间值当作当前三个结点的双亲结点。其中,79原本就是左结点,之后无变化还是左结点,颜色不变;82原本是右结点,之后变化为双亲结点,颜色取反;89原本是双亲结点,之后变为右结点,颜色取反。
②、比如"4.2、红黑树删除示例(带有过程描述)“中的第8步(下图4-57所示),当前操作是插入结点"18”,更新后爷爷结点"13"变为红色,而爷爷结点"13"的叔叔结点"89"为黑色,13<50<82,即13是50左结点,82是50右结点,50作为中间值当作当前三个结点的双亲结点。其中,13原本就是左结点,之后无变化还是左结点,颜色不变;50原本是左结点,之后变化为双亲结点,颜色取反;82原本是双亲结点,之后变为右结点,颜色取反。
③、比如"4.2、红黑树删除示例(带有过程描述)"中的第12步(下图4-58所示),当前插入结点20后,18<20<25,即18是20左结点,25是20右结点,20作为中间值当作当前三个结点的双亲结点。其中,18原本是双亲结点,之后变化为左结点,颜色取反;20原本是右结点,之后变化为双亲结点,颜色取反;25原本是右结点,之后无变化还是右结点,颜色不变。
④、比如"4.2、红黑树删除示例(带有过程描述)“中的第13步(下图4-59所示),当前操作是插入结点"36”,更新后爷爷结点"20"变为红色,而爷爷结点"20"的叔叔结点"3"为黑色,13<17<20,即13是17左结点,20是17右结点,17作为中间值当作当前三个结点的双亲结点。其中,13原本是双亲结点,之后变化为左结点,颜色取反;17原本是右结点,之后变化为双亲结点,颜色取反;20原本是右结点,之后无变化还是右结点,颜色不变。不再逐个举例,都是这样操作。
以上就是红黑树的插入结点操作过程。
4.2、红黑树插入结点示例(不带过程截图)
下面展示具体例子,关键字序列为:89,79,82,50,13,3,17,18,14,15,25,20,36,95,90,265,262,289,526,352,365,360,377,522,67。下面所有图中每一行分别是插入一个新结点的更新过程,【看具体过程的话,直接跳转到:4.1、红黑树删除示例(带有过程描述)即可】。
以上就是红黑树的插入结点操作过程。