Пример #1
0
  private static void getSum(
      int totalSum, int curVal, IntNode root, List<IntNode> path, Set<List<IntNode>> paths) {
    if (root == null) {
      if (totalSum == curVal) {
        paths.add(path);
      } else {
        int subSum = 0;
        for (int i = path.size() - 1; i >= 0; i--) {
          IntNode node = path.get(i);
          subSum += node.getValue();
          if (subSum == totalSum) {
            List<IntNode> newPath = path.subList(i, path.size());
            paths.add(newPath);
            //                        break;//keep if you only want shortest list
          }
        }
      }
      return;
    }

    //        System.out.println("Node:"+root.getValue()+" Sum:"+newSum);
    path.add(root);
    ArrayList<IntNode> pathCopy = Lists.newArrayList(path);
    getSum(totalSum, curVal, root.getLeftNode(), path, paths);
    getSum(totalSum, curVal, root.getRightNode(), pathCopy, paths);
  }
Пример #2
0
 private static void printPath(Set<List<IntNode>> paths) {
   for (List<IntNode> path : paths) {
     for (IntNode node : path) {
       System.out.print(node.getValue() + ",");
     }
     System.out.println();
   }
 }