public void InsertNode(RedBlackNode newNode) { RedBlackNode y = nil; RedBlackNode x = this.root; while (!IsNil(x)) { y = x; if (newNode.data.CompareTo(x.data) < 0) { x.numLeft++; x = x.left; } else { x.numRight++; x = x.right; } } newNode.dad = y; if (IsNil(y)) { this.root = newNode; } else if (newNode.data.CompareTo(y.data) < 0) { y.left = newNode; } else { y.right = newNode; } newNode.left = nil; newNode.right = nil; newNode.cor = RedBlackNode._RED; InsertFixUp(newNode); }
private void LeftRotateFixUp(RedBlackNode node) { if (IsNil(node.left) && IsNil(node.right.left)) { node.numLeft = 0; node.numRight = 0; node.right.numLeft = 1; } else if (IsNil(node.left) && !IsNil(node.right.left)) { node.numLeft = 0; node.numRight = 1 + node.right.left.numLeft + node.right.left.numRight; node.right.numLeft = 2 + node.right.left.numLeft + node.right.left.numRight; } else if (!IsNil(node.left) && IsNil(node.right.left)) { node.numRight = 0; node.right.numLeft = 2 + node.left.numLeft + node.left.numRight; } }
private bool IsNil(RedBlackNode node) { return(node == nil); }