//golang解法
package main
import "fmt"
/**
* Created by Chris on 2021/8/3.
*/
type TreeNode struct{
Val int
Left *TreeNode
Right *TreeNode
}
func pathSum(root *TreeNode, sum int) [][]int {
if root == nil{
return [][]int{}
}
//存放结果
var res [][]int
//暂存当前路径
var temp []int
//深度优先搜索
dfs(sum, &res, temp, root)
return res
}
func dfs(sum int, res *[][]int, temp []int, node *TreeNode){
//遇到空节点
if node == nil{
return
}
//记录路径:添加当前节点
temp = append(temp, node.Val)
sum -= node.Val
//遇到叶子节点
if node.Left == nil && node.Right == nil && sum == 0{
//创建新的切片,用于保存当前路径。
//不可以直接使用:*res = append(*res, temp),这是引用了temp中的数据,没有复制temp中的数据。
tempRes := append([]int(nil), temp...)
*res = append(*res, tempRes)
}
//递归
dfs(sum, res, temp, node.Left)
dfs(sum, res, temp, node.Right)
//去除节点
temp = temp[:len(temp) - 1]
}
func main() {
var node1 = &TreeNode{5, nil, nil}
var node2 = &TreeNode{4, nil, nil}
var node3 = &TreeNode{8, nil, nil}
var node4 = &TreeNode{1, nil, nil}
var node5 = &TreeNode{11, nil, nil}
var node6 = &TreeNode{9, nil, nil}
var node7 = &TreeNode{2, nil, nil}
var node8 = &TreeNode{7, nil, nil}
node1.Left = node2
node1.Right = node3
node2.Left = node4
node2.Right = node5
node3.Right = node6
node5.Left = node7
node5.Right = node8
var sum int = 22
var res [][]int = pathSum(node1, sum)
fmt.Println(res)
}