描述

给定一个二叉树 root 和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。

1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点

2.叶子节点是指没有子节点的节点

3.路径只能从父节点到子节点,不能从子节点到父节点

4.总节点数目为n
例如:
给出如下的二叉树sum=22,

         5
        /   \
       4        8
    /  \     \
   1   11     9
        /  \  
        2   7

返回 true,因为存在一条路径 5→4→11→2 的节点值之和为 22

数据范围:

1.树上的节点数满足 0≤n≤10000

2.每 个节点的值都满足 |val|≤1000

要求:空间复杂度 O(n),时间复杂度 O(n)

进阶:空间复杂度 O(树的高度),时间复杂度 O(n)

示例
// 输入:
{5,4,8,1,11,#,9,#,#,2,7},22
// 返回值:
true

// 输入:
{1,2},0
// 返回值:
false

// 输入:
{1,2},3
// 返回值:
true

// 输入:
{},0
// 返回值:
false
解题思路

前序遍历

代码实现
/**
  * [JZ82-简单] 二叉树中和为某一值的路径(一)
  *
  * @param root TreeNode 类 
  * @param sum int 整型 
  * @return bool 布尔型
*/
func hasTreePathSum(root *TreeNode, sum int) bool {
    if nil == root {
        return false
    }
    if nil == root.Left && nil == root.Right && root.Val == sum {
        return true
    }

    return hasTreePathSum(root.Left, sum - root.Val) || hasTreePathSum(root.Right, sum - root.Val)
}

本文由 一切随风 创作,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论