RBNode <T> MoveRedLeft(RBNode <T> node) { node.ColorFlip(); if (IsNodeRed(node.RightChild.LeftChild)) { node.RightChild = node.RightChild.RotateRight(); node = node.RotateLeft(); node.ColorFlip(); } return(node); }
RBNode <T> Fixup(RBNode <T> node) { if (!IsNodeRed(node.LeftChild) && IsNodeRed(node.RightChild)) { node = node.RotateLeft(); } if (IsNodeRed(node.LeftChild) && IsNodeRed(node.LeftChild.LeftChild)) { node = node.RotateRight(); } if (IsNodeRed(node.LeftChild) && IsNodeRed(node.RightChild)) { node.ColorFlip(); } return(node); }