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
}
相关推荐
JJ1M824 分钟前
前缀和+贪心总结,基于每日一题力扣3439、3440
python·算法·leetcode
呆呆的小鳄鱼35 分钟前
leetcode:518. 零钱兑换 II[完全背包]
算法·leetcode·职场和发展
沧澜sincerely2 小时前
二分查找【各种题型+对应LeetCode习题练习】
算法·leetcode·二分查找
岁忧8 小时前
(LeetCode 面试经典 150 题 ) 11. 盛最多水的容器 (贪心+双指针)
java·c++·算法·leetcode·面试·go
chao_7898 小时前
二分查找篇——搜索旋转排序数组【LeetCode】两次二分查找
开发语言·数据结构·python·算法·leetcode
Nejosi_念旧9 小时前
解读 Go 中的 constraints包
后端·golang·go
风无雨9 小时前
GO 启动 简单服务
开发语言·后端·golang
小明的小名叫小明9 小时前
Go从入门到精通(19)-协程(goroutine)与通道(channel)
后端·golang
光影少年9 小时前
从前端转go开发的学习路线
前端·学习·golang
斯普信专业组9 小时前
Go语言包管理完全指南:从基础到最佳实践
开发语言·后端·golang