Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.
Note: A leaf is a node with no children.
- Example:
- Given the below binary tree and sum = 22,
- 5
- / 4 8
- // 11 13 4
- / \ 7 2 1
- return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.
给定一个二叉树和一个目标和, 判断该树中是否存在根节点到叶子节点的路径, 这条路径上所有节点值相加等于目标和.
说明: 叶子节点是指没有子节点的节点.
示例:
给定如下二叉树, 以及目标和 sum = 22,
- 5
- / 4 8
- // 11 13 4
- / \ 7 2 1
返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2.
- /**
- * Definition for a binary tree node.
- * public class TreeNode {
- * public var val: Int
- * public var left: TreeNode?
- * public var right: TreeNode?
- * public init(_ val: Int) {
- * self.val = val
- * self.left = nil
- * self.right = nil
- * }
- * }
- */
- class Solution {
- func hasPathSum(_ root: TreeNode?, _ sum: Int) -> Bool {
- if root == nil {return false}
- return check(root,0,sum)
- }
- func check(_ node:TreeNode?,_ sum:Int,_ cur:Int)->Bool
- {
- if node == nil && sum == cur
- {
- return true
- }
- if node == nil
- {
- return false
- }
- if node!.left == nil && node!.right != nil
- {
- return check(node!.right,sum+node!.val,cur)
- }
- if node!.left != nil && node!.right == nil
- {
- return check(node!.left,sum+node!.val,cur)
- }
- return check(node!.left,sum + node!.val, cur)
- || check(node!.right,sum + node!.val, cur)
- }
- }
- 36ms
- /**
- * Definition for a binary tree node.
- * public class TreeNode {
- * public var val: Int
- * public var left: TreeNode?
- * public var right: TreeNode?
- * public init(_ val: Int) {
- * self.val = val
- * self.left = nil
- * self.right = nil
- * }
- * }
- */
- class Solution {
- func hasPathSum(_ root: TreeNode?, _ sum: Int) -> Bool {
- if root?.left == nil, root?.right == nil { // 叶节点或空节点
- guard root != nil else {
- return false
- }
- return sum == root!.val ? true : false
- }
- return hasPathSum(root?.left, sum - root!.val) || hasPathSum(root?.right, sum - root!.val)
- }
- }
- 28ms
- /**
- * Definition for a binary tree node.
- * public class TreeNode {
- * public var val: Int
- * public var left: TreeNode?
- * public var right: TreeNode?
- * public init(_ val: Int) {
- * self.val = val
- * self.left = nil
- * self.right = nil
- * }
- * }
- */
- class Solution {
- func hasPathSum(_ root: TreeNode?, _ sum: Int) -> Bool {
- guard let root = root else { return false }
- let difference = sum - root.val
- if difference == 0 && root.left == nil && root.right == nil {
- return true
- } else {
- return hasPathSum(root.left, difference) || hasPathSum(root.right, difference)
- }
- return false
- }
- }
来源: http://www.bubuko.com/infodetail-2782798.html