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
}
相关推荐
sin_hielo31 分钟前
leetcode 2110
数据结构·算法·leetcode
麦格芬2302 小时前
LeetCode 763 划分字母区间
算法·leetcode·职场和发展
serendipity_hky3 小时前
【go语言 | 第2篇】Go变量声明 + 常用数据类型的使用
开发语言·后端·golang
月明长歌3 小时前
【码道初阶】【LeetCode 110】平衡二叉树:如何用一个“Magic Number”将复杂度从O(N²)降为 O(N)?
linux·算法·leetcode
yaoh.wang3 小时前
力扣(LeetCode) 14: 最长公共前缀 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
周杰伦_Jay4 小时前
【Eino框架】Go语言驱动的LLM应用开发新范式
开发语言·后端·golang
埃伊蟹黄面5 小时前
算法 --- hash
数据结构·c++·算法·leetcode
ywwwwwwv6 小时前
力扣139
算法·leetcode·职场和发展
黛色正浓6 小时前
leetCode-热题100-哈希合集(JavaScript)
javascript·leetcode·哈希算法
2501_941982056 小时前
Go 进阶:发送文件/图片消息的流程与实现
开发语言·后端·golang