DFS+回溯
/**
*
* @param root TreeNode类
* @param sum int整型
* @return int整型二维数组
*/
func pathSum( root *TreeNode , sum int ) [][]int {
// write code here
if root == nil {
return nil
}
ret := make([][]int, 0)
path := []int{root.Val}
DFS(root, sum, root.Val, &path, &ret)
return ret
}
// DFS
// target 目标值
// pathSum 目前的路径和 path 路径上各个节点值 ret 最终的结果
func DFS(root *TreeNode, target, pathSum int, path *[]int, ret *[][]int) {
// 已经到达叶子节点
if root.Left == nil && root.Right == nil && pathSum == target {
tmp := make([]int, len(*path))
copy(tmp, *path)
*ret = append(*ret, tmp)
return
}
// 左子节点
if root.Left != nil {
pathSum += root.Left.Val
*path = append(*path, root.Left.Val)
DFS(root.Left, target, pathSum, path, ret)
pathSum -= root.Left.Val
*path = (*path)[:len(*path)-1]
}
// 右子节点
if root.Right != nil {
pathSum += root.Right.Val
*path = append(*path, root.Right.Val)
DFS(root.Right, target, pathSum, path, ret)
pathSum -= root.Right.Val
*path = (*path)[:len(*path)-1]
}
}

京公网安备 11010502036488号