private void RoateNode(RBTreeNode <T> inputNode) { var parentNode = inputNode.Parent; var parentparentNode = parentNode.Parent; if (!parentNode.IfIsRed) { return; } if ((inputNode == parentNode.LeftNode && parentNode == parentparentNode.LeftNode) || (inputNode == parentNode.RightNode && parentNode == parentparentNode.RightNode)) { parentparentNode.ChangeColor(); parentNode.ChangeColor(); if (parentNode == parentparentNode.LeftNode) { parentparentNode.RightRoate(this); } else { parentparentNode.LeftRoate(this); } } else { parentparentNode.ChangeColor(); inputNode.ChangeColor(); if (inputNode == parentNode.LeftNode) { parentNode.RightRoate(this); } else { parentNode.LeftRoate(this); } if (inputNode == parentparentNode.LeftNode) { parentparentNode.RightRoate(this); } else { parentparentNode.LeftRoate(this); } } ChangeColor(parentparentNode.Parent); }
private bool ChangeColor(RBTreeNode <T> inputNode) { if (!inputNode.IfIsRed && null != inputNode.LeftNode && null != inputNode.RightNode && inputNode.LeftNode.IfIsRed && inputNode.RightNode.IfIsRed) { inputNode.LeftNode.ChangeColor(); inputNode.RightNode.ChangeColor(); if (inputNode != RootNode) { inputNode.ChangeColor(); return(true); } else { return(false); } } return(false); }