logo CodeStepByStep logo

range

Language/Type: C++ binary trees pointers recursion

Write a function named range that removes from a binary tree any elements that are not in a given range, inclusive. Your function accepts three parameters: a reference to a pointer to a BinaryTreeNode representing the root of a tree, and a minimum and maximum integer. You should remove from the tree any elements whose values are not in the range of [min .. max], inclusive. You should also return an integer count of the number of elements that were removed, if any.

For this function, assume that your tree is a binary search tree (BST) and that its elements are arranged in a valid BST order. Your function should maintain the BST ordering property of the tree. For example, suppose a variable named tree points to the root of a tree that stores the following elements:

(50 (38 (14 (8) (20 / (26))) (42)) (90 (54 / (72 (61) (83)))))

The table below shows what the state of the tree would be if various calls were made. The calls shown are separate; it's not a chain of calls in a row. Also notice that each call returns the number of nodes that were removed.

range(tree, 25, 72) range(tree, 54, 80) range(tree, 18, 42) range(tree, -3, 6)
(50 (38 (26) (42)) (54 / (72 (61))))
(54 / (72 (61)))
(38 (20 / (26)) (42))
(empty tree)
returns 5 returns 9 returns 8 returns 12

Do not leak memory; if you remove a node from the tree, free the memory associated with that node. If the range is invalid (if the minimum exceeds the maximum), throw an integer exception and don't modify the tree.

Constraints: You must implement your function recursively and without using loops. Your solution should be at worst O(N) where N is the number of elements in the tree. Do not construct any new BinaryTreeNode objects in solving this problem (though you may create as many BinaryTreeNode* pointer variables as you like). Do not use any auxiliary data structures to solve this problem (no array, vector, stack, queue, string, etc). You may define helper functions. You should not modify the tree passed in as the parameter. You also should not change the data of any nodes.

Assume that you are using the BinaryTreeNode structure as defined below:

struct BinaryTreeNode {
    int data;
    BinaryTreeNode* left;
    BinaryTreeNode* right;
};
Function: Write a C++ function as described, not a complete program.

You must log in before you can solve this problem.

Log In

Need help?

Stuck on an exercise? Contact your TA or instructor.

If something seems wrong with our site, please

Is there a problem? Contact us.