Skip to content

Commit 2ec4508

Browse files
committed
437. Path Sum III
1 parent bc43b8c commit 2ec4508

File tree

3 files changed

+175
-0
lines changed

3 files changed

+175
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
2+
3+
class TreeNode(_value: Int = 0, _left: TreeNode = null, _right: TreeNode = null) {
4+
var value: Int = _value
5+
var left: TreeNode = _left
6+
var right: TreeNode = _right
7+
}
8+
9+
object Solution {
10+
def hasPathSum(root: TreeNode, targetSum: Int): Boolean = {
11+
def dfs(node: TreeNode, sum: Int): Boolean = {
12+
if (node == null) false else {
13+
val newSum = sum - node.value
14+
if (newSum == 0 && node.right == null && node.left == null) true
15+
else dfs(node.left, newSum) || dfs(node.right, newSum)
16+
}
17+
}
18+
dfs(root, targetSum)
19+
}
20+
}
21+
22+
val tree1 = new TreeNode(5,
23+
new TreeNode(4,
24+
new TreeNode(11,
25+
new TreeNode(7),
26+
new TreeNode(2)
27+
)
28+
),
29+
new TreeNode(8,
30+
new TreeNode(4),
31+
new TreeNode(2,
32+
new TreeNode(9),
33+
new TreeNode(11,
34+
new TreeNode(8),
35+
new TreeNode(10)
36+
)
37+
)
38+
)
39+
)
40+
41+
val tree2 = new TreeNode(1, new TreeNode(2))
42+
43+
val tree3 = new TreeNode(1, new TreeNode(2), new TreeNode(3))
44+
45+
Solution.hasPathSum(tree1, 22) // true
46+
Solution.hasPathSum(tree2, 1) // false
47+
Solution.hasPathSum(tree3, 5) // false
48+
49+
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
2+
3+
class TreeNode(_value: Int = 0, _left: TreeNode = null, _right: TreeNode = null) {
4+
var value: Int = _value
5+
var left: TreeNode = _left
6+
var right: TreeNode = _right
7+
}
8+
9+
object Solution {
10+
def pathSum(root: TreeNode, targetSum: Int): List[List[Int]] = {
11+
var result: List[List[Int]] = Nil
12+
def dfs(node: TreeNode, sum: Int, acc: List[Int]): Unit = {
13+
if (node != null) {
14+
val newSum = sum - node.value
15+
if (newSum == 0 && node.right == null && node.left == null) {
16+
result = (node.value :: acc) :: result
17+
} else {
18+
dfs(node.right, newSum, node.value :: acc)
19+
dfs(node.left, newSum, node.value :: acc)
20+
}
21+
}
22+
}
23+
dfs(root, targetSum, Nil)
24+
result.map(_.reverse)
25+
}
26+
}
27+
28+
val tree1 = new TreeNode(5,
29+
new TreeNode(4,
30+
new TreeNode(11,
31+
new TreeNode(7),
32+
new TreeNode(2)
33+
)
34+
),
35+
new TreeNode(8,
36+
new TreeNode(13),
37+
new TreeNode(4,
38+
new TreeNode(5),
39+
new TreeNode(1)
40+
)
41+
)
42+
)
43+
44+
val tree2 = new TreeNode(1, new TreeNode(2))
45+
46+
val tree3 = new TreeNode(1, new TreeNode(2), new TreeNode(3))
47+
48+
Solution.pathSum(tree1, 22) // List(List(5, 4, 11, 2), List(5, 8, 4, 5))
49+
Solution.pathSum(tree2, 1) // Nil
50+
Solution.pathSum(tree3, 5) // Nil
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
2+
3+
class TreeNode(_value: Int = 0, _left: TreeNode = null, _right: TreeNode = null) {
4+
var value: Int = _value
5+
var left: TreeNode = _left
6+
var right: TreeNode = _right
7+
}
8+
9+
object Solution {
10+
def pathSum(root: TreeNode, targetSum: Int): Int = {
11+
var result = 0
12+
def dfs(node: TreeNode, tail: List[Int]): Unit = {
13+
if (node != null) {
14+
val path = node.value :: tail
15+
val len = path.length
16+
var sum: Long = 0
17+
var i = 0
18+
while (i < len) {
19+
sum += path(i)
20+
if (sum == targetSum) {
21+
result += 1
22+
}
23+
i += 1
24+
}
25+
if (node.right != null || node.left != null) {
26+
dfs(node.right, path)
27+
dfs(node.left, path)
28+
}
29+
}
30+
}
31+
dfs(root, Nil)
32+
result
33+
}
34+
}
35+
36+
val tree1 = new TreeNode(10,
37+
new TreeNode(5,
38+
new TreeNode(3,
39+
new TreeNode(3),
40+
new TreeNode(-2)
41+
),
42+
new TreeNode(2,
43+
new TreeNode(1)
44+
)
45+
),
46+
new TreeNode(-3, new TreeNode(11))
47+
)
48+
49+
val tree2 = new TreeNode(1, new TreeNode(2))
50+
val tree3 = new TreeNode(1, new TreeNode(2), new TreeNode(3))
51+
val tree4 = new TreeNode(1)
52+
val tree5 = new TreeNode(
53+
1000000000,
54+
new TreeNode(
55+
1000000000,
56+
new TreeNode(
57+
294967296,
58+
new TreeNode(
59+
1000000000,
60+
new TreeNode(
61+
1000000000,
62+
new TreeNode(
63+
1000000000
64+
)
65+
)
66+
)
67+
)
68+
)
69+
)
70+
71+
72+
Solution.pathSum(tree1, 8) // 3
73+
Solution.pathSum(tree2, 1) // 1
74+
Solution.pathSum(tree3, 1) // 1
75+
Solution.pathSum(tree4, 1) // 1
76+
Solution.pathSum(tree5, 0) // 0

0 commit comments

Comments
 (0)