2021-12-15: 路径总和 III。给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-12-15: 路径总和 III。给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开相关的知识,希望对你有一定的参考价值。

2021-12-15: 路径总和 III。给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。力扣437。

答案2021-12-15:

时间紧,具体见代码。

代码用golang编写。代码如下:

package main

import "fmt"

func main() 
    root := &TreeNodeval: 1
    root.left = &TreeNodeval: 2
    root.right = &TreeNodeval: 3
    ret := pathSum(root, 3)
    fmt.Println(ret)


type TreeNode struct 
    val   int
    left  *TreeNode
    right *TreeNode


func pathSum(root *TreeNode, sum int) int 
    preSumMap := make(map[int]int)
    preSumMap[0] = 1
    return process(root, sum, 0, preSumMap)


// 返回方法数
func process(x *TreeNode, sum int, preAll int, preSumMap map[int]int) int 
    if x == nil 
        return 0
    
    all := preAll + x.val
    ans := 0
    if _, ok := preSumMap[all-sum]; ok 
        ans = preSumMap[all-sum]
    
    if _, ok := preSumMap[all]; !ok 
        preSumMap[all] = 1
     else 
        preSumMap[all] = preSumMap[all] + 1
    
    ans += process(x.left, sum, all, preSumMap)
    ans += process(x.right, sum, all, preSumMap)
    if preSumMap[all] == 1 
        delete(preSumMap, all)
     else 
        preSumMap[all] = preSumMap[all] - 1
    
    return ans

执行结果如下:


左神java代码

以上是关于2021-12-15: 路径总和 III。给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode437. 路径总和 III

[LeetCode] 437. 路径总和 III ☆☆☆(递归)

437. 路径总和 III

leetcode 437. 路径总和 III(Path Sum III)

LeetCode 437. 路径总和 III Path Sum III (Easy)

leetcode 437. 路径总和 III