我在树上执行旋转时遇到问题。没有旋转插入是好的,但是在执行旋转时信息会丢失。
插入示例50,75,40,45,25,45,46 - 即使RBT
规则一切正常但是当插入47时数据丢失且只有50,40,25,45和75出现。
//Left Rotate
public void LeftRotate(BNode root, BNode x)//violatingNode)
{
BNode y = x.right;
x.right = y.left;
if (y.left != null)
y.left.parent = x;
if (x.parent == null)
root = y;
else if (x.parent.left == x)
x.parent.left = y;
else
x.parent.right = y;
y.left = x;
y.parent = x.parent;
x.parent = y;
}
//Right Rotate
public void RightRotate(BNode root, BNode x) //BNode violatingNode
{
BNode y = x.left;
x.left = y.right;
if (y.right != null)
{
y.right.parent = x;
}
if (x.parent == null)
{
root = y;
}
else if (x.parent.left == x)
{
x.parent.left = y;
}
else
x.parent.right = y;
y.right = x;
y.parent = x.parent;
x.parent = y;
}