destructNodeAndAllChilds
Short summary
destructs / deepdestructs all nodes in the subtrees of a specified node and this node
Parameters
| Name | Type | Comment | Kind |
|---|---|---|---|
| node | CNM_CollectionInterfaces.IBinaryTreeNode | the node that should be destructed with all it's childs | input |
| destructNodeContents | BOOL | if true also the node contents will be destructed, if false only the nodes will be destructed | input |
Code
Declaration
METHOD PROTECTED destructNodeAndAllChilds
VAR_INPUT
(*the node that should be destructed with all it's childs*)
node :CNM_CollectionInterfaces.IBinaryTreeNode;
END_VAR
VAR_INPUT
(*if true also the node contents will be destructed, if false only the nodes will be destructed*)
destructNodeContents :BOOL;
END_VAR
VAR
child :CNM_CollectionInterfaces.IBinaryTreeNode;
END_VAR
VAR CONSTANT
OBJECT_NOT_REFERENCED :__XWORD := 0;
END_VAR
Implementation
IF THIS^.isObjectNull(node) THEN
RETURN;
END_IF
IF THIS^.isObjectValid(node.leftChild) THEN
child := node.leftChild;
THIS^.destructNodeAndAllChilds(node := child, destructNodeContents := destructNodeContents);
node.leftChild := OBJECT_NOT_REFERENCED;
END_IF
IF THIS^.isObjectValid(node.rightChild) THEN
child := node.rightChild;
THIS^.destructNodeAndAllChilds(node := child, destructNodeContents := destructNodeContents);
node.rightChild := OBJECT_NOT_REFERENCED;
END_IF
IF destructNodeContents THEN
node.deepDestruct();
ELSE
node.destruct();
END_IF
THIS^.decrementSize();