手撕JAVA(十五)红黑树(中)完整建树过程

手撕JAVA(十四)一文中有些地方表述有误,笔者日后在做修改。这里用画图的方式展示两次红黑树的完整建图过程,一次简单,一次复杂,根据建图过程,就可以理解红黑树是如何实现的。

总结的几点为:

1.根节点必为黑色,任何调整动作都无法将根节点染红

2.新插入节点的父节点和uncle节点同为红色,直接染黑父节点和uncle节点,染红祖父节点(如果祖父节点为根节点,就免疫)

3.新插入父节点为红色,uncle节点为空或者黑色分以下两种情况处理:

          3.1连续红节点同侧(即父节点如果在树的右子树,子节点也是父节点的右节点),以父节点为基准,左旋。

          3.2.连续红节点异侧,先将祖父节点、父节点变色,然后以祖父节点为基准右旋。

3.旋转动作后变为叶子节点的节点染红,变为根节点的节点染黑。

手撕JAVA(十五)红黑树(中)完整建树过程_第1张图片

 

手撕JAVA(十五)红黑树(中)完整建树过程_第2张图片

你可能感兴趣的:(手撕JAVA(十五)红黑树(中)完整建树过程)