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
}
相关推荐
凯瑟琳.奥古斯特5 分钟前
力扣1001网格照明解法
算法·leetcode·职场和发展
郝学胜-神的一滴1 小时前
力扣 144:二叉树前序遍历的优雅实现
java·数据结构·c++·python·算法·leetcode·职场和发展
go不是csgo1 小时前
Go-GMP-调度器深度解析(改进版本)
java·linux·golang
菜菜的顾清寒2 小时前
力扣HOT100(48)图论-腐烂的橘子
算法·leetcode·图论
知彼解己2 小时前
SQLite 核心实战:后端工程师视角
后端·golang·ai编程
fengxin_rou2 小时前
【滑动窗口与前缀和算法实战】:LeetCode560.438 高频题深度解析
java·算法·leetcode
dusk_star2 小时前
go语言--笔记--接口
java·笔记·golang
Brilliantwxx2 小时前
【算法从零到千】【1-7】 双指针算法
开发语言·c++·笔记·算法·leetcode·推荐算法
菜菜的顾清寒2 小时前
力扣HOT100(49)动态规划 -- 打家劫舍
算法·leetcode·动态规划
会编程的土豆2 小时前
前端和后端是怎么配合工作的(Go后端视角)
前端·golang·状态模式