in csharp/src/Containers/AvlTree.cs [978:1006]
private void RightFix(Int32 NodeIndex, Int32 ParentIndex)
{
Entry node = _data[NodeIndex];
Int32 leftHeight = node._left == _NO_ELEMENT ? 0 : _data[node._left]._height;
Int32 rightHeight = node._right == _NO_ELEMENT ? 0 : _data[node._right]._height;
if (leftHeight + 1 < rightHeight)
{
Entry right = _data[node._right];
leftHeight = right._left == _NO_ELEMENT ? 0 : _data[right._left]._height;
rightHeight = right._right == _NO_ELEMENT ? 0 : _data[right._right]._height;
if (rightHeight < leftHeight)
RotateRight(_data[_data[NodeIndex]._right]._left, _data[NodeIndex]._right, NodeIndex);
RotateLeft(NodeIndex, _data[NodeIndex]._right, ParentIndex);
}
node = _data[NodeIndex];
leftHeight = node._left == _NO_ELEMENT ? 0 : _data[node._left]._height;
rightHeight = node._right == _NO_ELEMENT ? 0 : _data[node._right]._height;
_data[NodeIndex]._height = 1 + (leftHeight > rightHeight ? leftHeight : rightHeight);
_data[NodeIndex]._count = 1 + (node._left == _NO_ELEMENT ? 0 : _data[node._left]._count) +
(node._right == _NO_ELEMENT ? 0 : _data[node._right]._count);
}