1、2、3、4和5都是子树。我们知道树1、2和3的根节点颜色为黑色。我们不知道节点1-5中是否有叶节点,因为插入操作可能在新插入节点的祖父节点N上递归调用(来自插入情况3)。
旋转前后,子树1、2和3都位于一个黑节点下方(旋转前为G,旋转后为P),而子树4和5都位于两个黑节点下方(旋转前为G和U,旋转后为P和U)。子树1、2和3每个比子树4和5多一个黑节点。
N
是刚插入的节点,这意味着在P
下最后一个insert
之前有子节点[1,3]或[2,3](分别插入2或1)。因此,在最后一次插入之前,在P
和U
之前必须是红色的(而4、5为黑色)。NIL节点配置完全是可选的。它们之所以是黑色的唯一原因是您想默认保存额外的红色节点。它们可以随后根据需要变为红色。
分配的黑色节点增加了黑高度,这也是一个可选的高度差异。因为您必须在某个地方记录NIL标志,所以可以将其分配为黑色节点。
您只能节省1位地址空间;通常系统非常接近其极限。
U
应该从一开始就是红色的。因此最后也应该是红色的。 - Roee Gavirel