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); }
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(); } }