Golang | Leetcode Golang题解之第113题路径总和II

题目:

题解:

Go 复制代码
type pair struct {
    node *TreeNode
    left int
}

func pathSum(root *TreeNode, targetSum int) (ans [][]int) {
    if root == nil {
        return
    }

    parent := map[*TreeNode]*TreeNode{}

    getPath := func(node *TreeNode) (path []int) {
        for ; node != nil; node = parent[node] {
            path = append(path, node.Val)
        }
        for i, j := 0, len(path)-1; i < j; i++ {
            path[i], path[j] = path[j], path[i]
            j--
        }
        return
    }

    queue := []pair{{root, targetSum}}
    for len(queue) > 0 {
        p := queue[0]
        queue = queue[1:]
        node := p.node
        left := p.left - node.Val
        if node.Left == nil && node.Right == nil {
            if left == 0 {
                ans = append(ans, getPath(node))
            }
        } else {
            if node.Left != nil {
                parent[node.Left] = node
                queue = append(queue, pair{node.Left, left})
            }
            if node.Right != nil {
                parent[node.Right] = node
                queue = append(queue, pair{node.Right, left})
            }
        }
    }

    return
}
相关推荐
谢亮_vipxieliang23 分钟前
Go 接口设计原则核心知识点
开发语言·ios·golang
谢亮_vipxieliang24 分钟前
Go 结构体与方法集核心知识点
java·开发语言·golang
Cccp.12336 分钟前
【leetcode】(九)哈希函数与哈希表
数据结构·leetcode·哈希算法
xieliyu.39 分钟前
LeetCode 1419 数青蛙:状态模拟求最少青蛙数量|Java 题解
java·算法·leetcode
Nil2081 小时前
leetcode 45跳跃游戏Ⅱ
算法·leetcode·游戏
王老师青少年编程1 小时前
2026年6月GESP真题及题解(C++八级): 选择题和判断题(题解)
c++·题解·真题·gesp·csp·信奥赛·八级
longlongzihan1 小时前
LeetCode 283. 移动零:从辅助数组到双指针原地算法
c++·算法·leetcode
longlongzihan15 小时前
LeetCode 5. 最长回文子串:从暴力匹配到中心扩展的思维演进
c++·算法·leetcode
苦瓜打怪兽15 小时前
leetcode 热题100(11. 盛最多水的容器)
python·算法·leetcode
microrain18 小时前
同一个寄存器,四种读法:SagooIoT Modbus 驱动的字节序、宽度与功能码
物联网·golang·开源·sagooiot