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 := &TreeNode{val: 1}
    root.left = &TreeNode{val: 2}
    root.right = &TreeNode{val: 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代码

posted @   福大大架构师每日一题  阅读(22)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
历史上的今天:
2020-12-15 2020-12-15:mysql的回滚机制是怎么实现的?
2020-12-15 2020-11-16:手写代码:leetcode第406题。假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。
点击右上角即可分享
微信分享提示