searchSuccessor
Short summary
searches a successor and removes it from the tree so it can be used to replace another (deleted) node
Return: The successor node
Parameters
| Name | Type | Comment | Kind |
|---|---|---|---|
| elem | CNM_CollectionInterfaces.IBalancedBinarySearchTreeNode | The element that the successor is searched from | input |
| heightNotChanged | BOOL | True if operation did not change the height of the subtree / heightchange was handled | inout |
Code
Declaration
METHOD PROTECTED searchSuccessor :CNM_CollectionInterfaces.IBalancedBinarySearchTreeNode
VAR_INPUT
(*The element that the successor is searched from*)
elem :CNM_CollectionInterfaces.IBalancedBinarySearchTreeNode;
END_VAR
VAR_IN_OUT
(*True if operation did not change the height of the subtree / heightchange was handled*)
heightNotChanged :BOOL;
END_VAR
VAR
newRoot :CNM_CollectionInterfaces.IBalancedBinarySearchTreeNode;
rightChild :CNM_CollectionInterfaces.IBalancedBinarySearchTreeNode;
END_VAR
Implementation
__QUERYINTERFACE(elem.rightChild,rightChild);
IF THIS^.isObjectNull(elem.rightChild.leftChild) THEN
searchSuccessor := rightChild;
elem.rightChild := elem.rightChild.rightChild;
heightNotChanged := FALSE;
RETURN;
ELSE
searchSuccessor := recursivSearchSuccessor(elem:=rightChild,heightNotChanged:=heightNotChanged,newRoot=>newRoot);
elem.rightChild := newRoot;
RETURN;
END_IF