logo Practice-It logo

limitPathSum

Related Links:
Author: Robert Baxter

Write a method limitPathSum that removes nodes from a binary tree of integers to guarantee that the sum of the values on any path from the root to a node does not exceed some maximum value. For example, suppose that a variable tree stores a reference to the following tree:

                        +----+
                        | 29 |
                      _ +----+ _
                  _ /            \ _
                /                    \
            +----+                  +----+
            | 17 |                  | 15 |
            +----+                  +----+
           /      \                /      \
          /        \              /        \
      +----+      +----+      +----+      +----+
      | -7 |      | 37 |      |  4 |      | 14 |
      +----+      +----+      +----+      +----+
     /      \           \                /      \
    /        \           \              /        \
+----+      +----+      +----+      +----+      +----+
| 11 |      | 12 |      | 16 |      | -9 |      | 19 |
+----+      +----+      +----+      +----+      +----+

Then the call of tree.limitPathSum(50); will remove nodes so as to guarantee that no path from the root to a node has a sum that is greater than 50. This will require removing the node with 12 because the sum of the values from the root to that node is greater than 50 (29 + 17 + -7 + 12 = 51). Similarly, we have to remove the node with 37 because its sum is too high (29 + 17 + 37 = 83). Whenever you remove a node, you remove anything under it as well, so removing 37 also removes 16. We also remove the node with 14 and everything under it because its sum is high enough (29 + 15 + 14 = 58). Thus we produce the following tree:

                  +----+
                  | 29 |
                  +----+
                 /      \
                /        \
            +----+      +----+
            | 17 |      | 15 |
            +----+      +----+
           /           /
          /           /
      +----+      +----+
      | -7 |      |  4 |
      +----+      +----+
     /
    /
+----+
| 11 |
+----+

The method would remove all nodes if the data stored at the overallRoot is greater than the given maximum.

Assume that you are adding this method to the IntTree class as defined below:

public class IntTree {
    private IntTreeNode overallRoot;
    ...
}
Type your solution here:


This is a partial class problem. Submit code that will become part of an existing Java class as described. You do not need to write the complete class, just the portion described in the problem.

You must log in before you can solve this problem.


Log In

If you do not understand how to solve a problem or why your solution doesn't work, please contact your TA or instructor.
If something seems wrong with the site (errors, slow performance, incorrect problems/tests, etc.), please

Is there a problem? Contact a site administrator.