参考了其他人的解法,整理出来go的写法

首先,这里使用了DFS递归

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

/**
  * 
  * @param root TreeNode类 
  * @return int整型
*/
func sumNumbers( root *TreeNode ) int {
    // write code here
    if root == nil {
        return 0
    }

    sum := 0
    //DFS递归写法
    DFS(root, root.Val, &sum)

    return sum
}

// DFS 递归写法
// num 为当前节点之前的和 + 当前节点的值
func DFS(node *TreeNode, num int, sum *int) {
//     如果左右子节点都为空,则说明到达了叶子节点
//     此时需要把整个路径上的数字加到结果中
    if node.Left == nil && node.Right == nil {
        *sum = *sum + num
        return
    }

//     左右子节点不为空,则进入到下一层递归
    if node.Left != nil {
        DFS(node.Left, num*10 + node.Left.Val, sum)
    }

    if node.Right != nil {
        DFS(node.Right, num*10 + node.Right.Val, sum)
    }
}