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
}
相关推荐
Liangwei Lin1 小时前
LeetCode 74. 搜索二维矩阵
算法·leetcode·矩阵
mask哥8 小时前
力扣算法java实现汇总整理(上)
java·算法·leetcode
流年如夢12 小时前
栈和列队(LeetCode)
数据结构·算法·leetcode·链表·职场和发展
2501_9318037515 小时前
Go:一门为解决C语言痛点而生的现代语言
c语言·开发语言·golang
geovindu15 小时前
go: Interpreter Pattern
开发语言·设计模式·golang·解释器模式
星星码️17 小时前
LeetCode刷题简单篇之反转字母
c++·算法·leetcode
平凡但不平庸的码农20 小时前
Go Channel详解
开发语言·后端·golang
子安柠20 小时前
深入理解 Go 语言文件操作:从基础到最佳实践
开发语言·后端·golang
Achou.Wang20 小时前
go语言中使用等待组(waitgroups)和内存屏障(barriers)进行同步
开发语言·后端·golang
sheeta199821 小时前
LeetCode 每日一题笔记 日期:2026.05.10 题目:2770. 达到末尾下标所需的最大跳跃次数
笔记·算法·leetcode