-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy pathTreePathSum.cs
61 lines (46 loc) · 1.45 KB
/
TreePathSum.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Tree.TreeLib
{
// You are given a binary tree in which each node contains an integer value.
//Find the number of paths that sum to a given value.
//The path does not need to start or end at the root or a leaf, but it must go downwards (traveling only from parent nodes to child nodes).
//The tree has no more than 1,000 nodes and the values are in the range -1,000,000 to 1,000,000.
//Example:
//root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8
// 10
// / \
// 5 -3
// / \ \
// 3 2 11
// / \ \
//3 -2 1
//Return 3. The paths that sum to 8 are:
//1. 5 -> 3
//2. 5 -> 2 -> 1
//3. -3 -> 11
public class TreePathSum
{
public int PathSum(TreeNode root, int sum)
{
int cnt = onePathSum(root, sum);
if (root != null)
cnt += PathSum(root.left, sum) + PathSum(root.right, sum);
return cnt;
}
private int onePathSum(TreeNode root, int sum)
{
if (root == null)
return 0;
int cnt = 0;
if (root.val == sum)
cnt = 1;
//求以root为根的路径val和等于sum的
cnt += onePathSum(root.left, sum - root.val);
cnt += onePathSum(root.right, sum - root.val);
return cnt;
}
}
}