[Leetcode]27.路径总和 II
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:[[5,4,11,2],[5,8,4,5]]
示例 2:
输入:root = [1,2,3], targetSum = 5
输出:[]
示例 3:
输入:root = [1,2], targetSum = 0
输出:[]
思想:深度优先 递归搜索,增加一个保存路径的数组,判断叶子结点是否符合目标要求。
func pathSum(root *TreeNode, targetSum int) [][]int {
var visited []int
var res [][]int
if root == nil {
return res
}
var dfs func(root *TreeNode, sum int, visited []int)
dfs = func(root *TreeNode, sum int, visited []int) {
visited = append(visited, root.Val)
sum += root.Val
if root.Left == nil && root.Right == nil {
if sum == targetSum {
res1 := make([]int, len(visited))
for i := 0; i < len(visited); i++ {
res1[i] = visited[i]
}
res = append(res, res1)
}
}
if root.Left != nil {
dfs(root.Left, sum, visited)
}
if root.Right != nil {
dfs(root.Right, sum, visited)
}
}
dfs(root, 0, visited)
return res
}
题目来源:https://leetcode-cn.com/problems/path-sum-ii