import java.util.HashMap;
public class PathSumIII {
/**
* å½root.val == Sumæ¶ï¼ä¸è¦returnï¼å 为继ç»å¾ä¸èµ°å¯è½æè·¯å¾å好å èµ·æ¥ä¸º0ï¼å
¸åç为[1,-2,1,-1]ï¼ç®æ å为-1
* è¿ééèäºåæ¡è·¯å¾ï¼[1,-2], [-2,1], [-1], [1,-2,1,-1]ï¼å¦æå¨[1,-2]å°±returnäºï¼é£å°±ä¼æäº[1,-2,1,-1]
* å¯åèhttps://discuss.leetcode.com/category/562/path-sum-iii
*/
/**
* æä¸¤ç§å¯è½ï¼ç®ä¸å½årootåä¸ç®å½åroot
*/
public int pathSum(TreeNode root, int sum) {
int[] count = new int[1];
helperSum(root, sum, count);
return count[0];
}
/**
* æ¢å¯ä»¥ç®ä¸ï¼ä¹å¯ä»¥ä¸ç®ä¸root
*/
private void helperSum(TreeNode root, int sum, int[] count) {
if (root == null) {
return;
}
// ç®ä¸root
helper(root, sum, count);
// ä¸ç®ä¸root
helperSum(root.left, sum, count);
helperSum(root.right, sum, count);
}
/**
* ç®ä¸root
*/
private void helper(TreeNode root, int sum, int[] count) {
if (root == null) {
return;
}
if (root.val == sum) {
count[0]++;
// è¿éä¸ç¨è¿åï¼å 为ä¸é¢çè·¯å¾åå¯è½ä¸º0;
}
helper(root.left, sum - root.val, count);
helper(root.right, sum - root.val, count);
}
/**
* æ´ä¼åçåæ³ï¼æ¶é´å¤æåº¦O(n)
* åTwo Sumè¾ç±»ä¼¼ï¼é½æ¯ç®åºä»rootå°å½åèç¹çåï¼target为两段åçå·®å¼
*/
public int pathSum2(TreeNode root, int sum) {
HashMap