-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathHasPathSum.kt
75 lines (62 loc) · 2.23 KB
/
HasPathSum.kt
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package com.daily.algothrim.leetcode.top150
import com.daily.algothrim.leetcode.TreeNode
/**
* 112. 路径总和
*/
/*
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。
示例 2:
输入:root = [1,2,3], targetSum = 5
输出:false
解释:树中存在两条根节点到叶子节点的路径:
(1 --> 2): 和为 3
(1 --> 3): 和为 4
不存在 sum = 5 的根节点到叶子节点的路径。
示例 3:
输入:root = [], targetSum = 0
输出:false
解释:由于树是空的,所以不存在根节点到叶子节点的路径。
提示:
树中节点的数目在范围 [0, 5000] 内
-1000 <= Node.val <= 1000
-1000 <= targetSum <= 1000
*/
class HasPathSum {
companion object {
@JvmStatic
fun main(args: Array<String>) {
println(
HasPathSum().hasPathSum(
TreeNode(5).apply {
left = TreeNode(4).apply {
left = TreeNode(11).apply {
left = TreeNode(7)
right = TreeNode(2)
}
}
right = TreeNode(8).apply {
left = TreeNode(13)
right = TreeNode(4).apply {
right = TreeNode(1)
}
}
}, 22
)
)
}
}
/**
* O(n)
* O(H) H树的高度
*/
fun hasPathSum(root: TreeNode?, targetSum: Int): Boolean {
if (root == null) return false
if (targetSum - root.`val` == 0 && root.left == null && root.right == null) return true
return hasPathSum(root.left, targetSum - root.`val`) || hasPathSum(root.right, targetSum - root.`val`)
}
}