Golang算法 - Leetcode

 主页   资讯   文章   代码   电子书 

112. Path Sum

Leetcode 链接

题目

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.

题意解析

判断是否存在一条从根节点到叶子节点的路径,该路径和为指定的数。

解决方案

  • 比较简单,从根节点出发,记录到达每个节点时的路径和,碰到叶子节点的时候返回结果就行

Go 代码

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func find(root *TreeNode, tmp int, sum *int) bool {
    if root == nil {
        return false
    }
    tmp += root.Val
    if (root.Left == nil) && (root.Right == nil) {
        if tmp == *sum {
            return true
        } else {
            return false
        }
    }
    return find(root.Left, tmp, sum) || find(root.Right, tmp, sum)
}

func hasPathSum(root *TreeNode, sum int) bool {
    return find(root, 0, &sum)
}