in csharp/src/Containers/AvlTree.cs [948:976]
private void LeftFix(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 > rightHeight + 1)
{
Entry left = _data[node._left];
leftHeight = left._left == _NO_ELEMENT ? 0 : _data[left._left]._height;
rightHeight = left._right == _NO_ELEMENT ? 0 : _data[left._right]._height;
if (rightHeight > leftHeight)
RotateLeft(node._left, _data[node._left]._right, NodeIndex);
RotateRight(_data[NodeIndex]._left, NodeIndex, 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);
}