Skip to main content

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

NameTypeCommentKind
elemCNM_CollectionInterfaces.IBalancedBinarySearchTreeNodeThe element that the successor is searched frominput
heightNotChangedBOOLTrue if operation did not change the height of the subtree / heightchange was handledinout

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