Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
Note: A leaf is a node with no children.
Example:
Given the below binary tree and sum = 22
,
5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1
Return:
[ [5,4,11,2], [5,8,4,5] ]
My answer is:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public List<List<Integer>> pathSum(TreeNode root, int sum) { List<List<Integer>> result = new ArrayList<List<Integer>>(); helper(root, sum, 0, new ArrayList<Integer>(), result); return result; } public void helper(TreeNode node, int sum, int currentSum, List<Integer> currentNodes, List<List<Integer>> result) { if (node == null) { return; } currentSum += node.val; currentNodes.add(node.val); if (node.left == null && node.right == null) { if (currentSum == sum) { List<Integer> foundNodes = new ArrayList<Integer>(currentNodes); result.add(foundNodes); } currentNodes.remove(currentNodes.size() - 1); return; } helper(node.left, sum, currentSum, currentNodes, result); helper(node.right, sum, currentSum, currentNodes, result); currentNodes.remove(currentNodes.size() - 1); } }
No comments:
Post a Comment