129. 求根节点到叶节点数字之和

给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。

每条从根节点到叶节点的路径都代表一个数字:

  • 例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。

计算从根节点到叶节点生成的 所有数字之和 。

叶节点 是指没有子节点的节点。

示例 1:

输入:root = [1,2,3]
输出:25
解释:
从根到叶子节点路径 `1->2` 代表数字 `12`
从根到叶子节点路径 `1->3` 代表数字 `13`
因此,数字总和 = 12 + 13 = `25`

示例 2:

输入:root = [4,9,0,5,1]
输出:1026
解释:
从根到叶子节点路径 `4->9->5` 代表数字 495
从根到叶子节点路径 `4->9->1` 代表数字 491
从根到叶子节点路径 `4->0` 代表数字 40
因此,数字总和 = 495 + 491 + 40 = `1026`

提示:

  • 树中节点的数目在范围 [1, 1000] 内
  • 0 <= Node.val <= 9
  • 树的深度不超过 10

根据题目递归即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func sumNumbers(root *TreeNode) int {
sum := 0
var getPathNum func(*TreeNode, int)

getPathNum = func(node *TreeNode, pre int) {
if node.Left != nil {
getPathNum(node.Left, pre * 10 + node.Left.Val)
}
if node.Right != nil {
getPathNum(node.Right, pre * 10 + node.Right.Val)
}
if node.Left == nil && node.Right == nil {
sum += pre
}
}
getPathNum(root, root.Val)

return sum
}