思路就不说啦,以后有时间补,只是作为一个go的初学者,在这里找不到go的实现,所以尝试留点东西

package main
import . "nc_tools"
/*
 * type TreeNode struct {
 *   Val int
 *   Left *TreeNode
 *   Right *TreeNode
 * }
 */

/**
  * 
  * @param root TreeNode类 
  * @param sum int整型 
  * @return int整型二维数组
*/
var result = make([][]int, 0, 0)

func pathSum( root *TreeNode ,  sum int ) [][]int {
    // write code here
    var items []int
    backtrack(items, sum, root)
    return result
}

func backtrack(items []int, sum int, node *TreeNode) {
    if node == nil {
        return
    }

    if node.Left == nil && node.Right == nil && node.Val == sum {
        items = append(items, node.Val)
        var temp = make([]int, len(items))
        copy(temp, items)
        result = append(result, temp)
        return
    }

    items = append(items, node.Val)
    backtrack(items, sum - node.Val, node.Left)
    backtrack(items, sum - node.Val, node.Right)
    items = items[:len(items) - 1]
}