Given a binary tree and a sum, find all root-to-leaf paths where each path‘s sum equals the given sum.
For example:
Given the below binary tree andsum = 22
,5 / 4 8 / / 11 13 4 / \ / 7 2 5 1return
[ [5,4,11,2], [5,8,4,5] ]
和问题一的不同是:需要找出所有的。使用subList来保存当前的元素,如果递归返回之后,需要删除最后一个元素。满足条件后新建一个List,元素为当前subList中的元素。public void preOrder(TreeNode node, int sum, int tempSum, List<Integer> subList, List<List<Integer>> list ) { if (node != null) { tempSum += node.val; subList.add(node.val); if (node.left == null && node.right == null) { if (tempSum == sum) { list.add(new ArrayList<Integer>(subList)); } } preOrder(node.left, sum, tempSum, subList, list); preOrder(node.right, sum, tempSum, subList, list); subList.remove(subList.size() - 1); } } public List<List<Integer>> pathSum(TreeNode root, int sum) { List<List<Integer>> list = new ArrayList<List<Integer>>(); List<Integer> subList = new ArrayList<Integer>(); preOrder(root,sum,0,subList,list); return list; }
原文地址:http://blog.csdn.net/u010378705/article/details/28440107