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
执行结果如下:
以上是关于2021-12-15: 路径总和 III。给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode] 437. 路径总和 III ☆☆☆(递归)
leetcode 437. 路径总和 III(Path Sum III)