/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List> pathSum(TreeNode root, int sum) { List> result = new ArrayList>(); if (root == null) return result; Stack path = new Stack(); preOrder(root, path, result, 0, sum); return result; } private final void preOrder(TreeNode node, Stack path, List> result, int currSum, int expectedSum) { path.push(node.val); currSum += node.val; if (node.left == null && node.right == null && currSum == expectedSum) { if (currSum == expectedSum) { List pathList = new ArrayList(); for (int val : path) { pathList.add(val); } result.add(pathList); } } if (node.left != null) { preOrder(node.left, path, result, currSum, expectedSum); } if (node.right != null) { preOrder(node.right, path, result, currSum, expectedSum); } path.pop(); } }