Skip to main content

checkLeftRotation

Short summary​

check if a leftrotation is neccesary (=> is right subtree to deep?), if necessary it is performed

Return: returns the new root of the subtree, that replaces the node for that the rotation was checked

Parameters​

NameTypeCommentKind
elemCNM_CollectionInterfaces.IBalancedBinarySearchTreeNodeThe element for that the rotation should be checkedinput
removingBOOLindicates if method was called in context of remove (then true) or in context of insert (then false)input
heightNotChangedBOOLsignals if the height of any subtree has changedinout

Code​

Declaration​

METHOD PROTECTED checkLeftRotation :CNM_CollectionInterfaces.IBalancedBinarySearchTreeNode
VAR_INPUT
(*The element for that the rotation should be checked*)
elem :CNM_CollectionInterfaces.IBalancedBinarySearchTreeNode;
(*indicates if method was called in context of remove (then true) or in context of insert (then false) *)
removing :BOOL := FALSE;
END_VAR
VAR_IN_OUT
(*signals if the height of any subtree has changed*)
heightNotChanged :BOOL;
END_VAR

Implementation​

IF heightNotChanged THEN 
checkLeftRotation := elem;
RETURN;
ELSE
CASE elem.balance OF
CNM_CollectionInterfaces.TreeBalance.EQUALDEEP:
elem.balance := CNM_CollectionInterfaces.TreeBalance.RIGHTDEEPER;
heightNotChanged := removing;
checkLeftRotation := elem;
RETURN;
CNM_CollectionInterfaces.TreeBalance.LEFTDEEPER:
elem.balance := CNM_CollectionInterfaces.TreeBalance.EQUALDEEP;
heightNotChanged := NOT removing;
checkLeftRotation := elem;
RETURN;
CNM_CollectionInterfaces.TreeBalance.RIGHTDEEPER:
checkLeftRotation := reorganizeLeftRotate(elem := elem, heightNotChanged := heightNotChanged, removing := removing);
RETURN;
END_CASE
END_IF