| 123456789101112131415161718192021222324252627282930313233343536373839404142 | package main/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */func pathSum(root *TreeNode, sum int) [][]int {	result := make([][]int, 0)	path := make([]int, 0)	pathSumHelper(&result, &path, root, sum)	return result}func pathSumHelper(result *[][]int, path *[]int, root *TreeNode, sum int) {	if root == nil {		return	}	*path = append(*path, root.Val)	if root.Left == nil && root.Right == nil && root.Val == sum {		newPath := make([]int, len(*path)) // Deep copy & pointer		copy(newPath, *path)               // Important!!!		*result = append(*result, newPath)	}	pathSumHelper(result, path, root.Left, sum-root.Val)	pathSumHelper(result, path, root.Right, sum-root.Val)	*path = (*path)[:len(*path)-1]}// func main() {// 	//         3// 	//        / \// 	//       7  -1// 	//      /\   /\// 	//     1  5 9  4// 	root1 := sortedArrayToBST([]int{1, 7, 5, 3, 9, -1, 4})// 	fmt.Println(pathSum(root1, 11))// 	fmt.Println(pathSum(root1, 12))// }
 |