Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 2ec4508

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /