红黑树特性 1.根节点一定是黑色。 2.红色节点的两个子节点一定是黑色。(结合1和2推导出,红色节点一定有父节点,且父节点一定是黑色的) 3.对每个节点,若其没有子节点,都会虚构一个叶子节点(黑色,值为null)补上去,两个子节点缺哪个补哪个,两个都缺则都补。 4.任意一节点,到所有叶子节点路径的中间,都存在相同的黑色节点。(所以红黑树不是完美平衡二叉树,而是黑色完美平衡二叉树) 添加节点特性: 1.默认添加的是红色节点 2.红黑树自平衡最小单元是GPUC。Grandfather祖父节点,Parents父节点,Uncle叔叔节点,Current当前节点。 3.一定是父节点绕子节点为圆心旋转,父节点在子节点的左边则左旋成为子节点的左子节点,父节点在子节点的右边则右旋成为子节点的右子节点。 旋转之后父节点成为了圆心的子节点: ①祖父节点的线变成连着了圆心,因为它变成了父节点。 ②如果圆心原来有子节点,被父节点旋转后霸占了位置,则该子节点成为父节点的子节点。 添加节点遇到的4种情况: 1.添加的节点是根节点,则把节点的红色变成黑色。 2.添加的节点的父节点P是黑色,维持节点本身的红色不变。 3.添加的节点的父节点P是红色,叔叔节点U也是红色(此时祖父节点G必是黑色)。 然后把父节点F和叔叔节点U变黑色,祖父节点G变红色。 如果祖父节点G变成红色不符合红黑树的特性,则把祖父节点G当作新增节点,按照添加情况1,2,3,4重新处理。 4.添加的节点的父节点G是红色,叔叔节点U是黑色或空 4.1 添加的节点和父节点F和祖父节点G,祖孙三代三点一线 祖父节点G绕父节点F旋转,然后这2个节点改变颜色(G点旋转)。 4.2 添加的节点和父节点F和祖父节点G呈三角关系 父节点F绕添加节点旋转,重新定义了祖孙三代关系后,按4.1的逻辑再执行一次(P点旋转)。
红黑树
最新推荐文章于 2022-01-18 08:59:00 发布