[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