A destructive function modifies a tree. For example, the following function replaces each item in a tree by its cube.
void cubeAll(Tree T) { if(T != NULL) { T->item = cube(T->item); cubeAll(T->left); cubeAll(T->right); } }Note that T does not need to be passed by reference to cubeAll because cubeAll does not need to change the pointer T. It only changes the node to which T points (and other nodes in subtrees). So cubeAll uses call by pointer. But some functions do need to use call by reference, since they need to store a different pointer into a variable. We will see some examples of that shortly.
The mirror image of a tree is defined in question 4. Write a definition of function flip(T ) that changes T into its mirror image. This is a destructive function. Answer
Why doesn't the parameter of flip in the preceding question need to be passed by reference? Answer
Write a definition of function destroy(T ), which deletes every node in tree T. Answer