0%

leetCode-129:Sum Root to Leaf Numbers

问题描述

给定一个二叉树,用树的路径表示一个数字(从根节点到叶子节点经过的节点按先后顺序组成的数字),要求找出所有树路径代表的数字之和。题目链接:**点我**

样例输入输出

输入:[1, 2, 3]

输出:25

说明:输入代表以下的树

1

/ \

2 3

树路径代表的数字为:12、13,和为 25

输入:[1, 2, 3, 4]

输出:137

说明:输入代表以下的树

1

/ \

2 3

/

4

树路径代表的数字为:124、13,和为137

问题解法

采用先序遍历树的方式,遍历过程中记录从根节点到当前节点路径代表的数字,每次在到达叶子节点时,将这个数字加到全局变量中。待树遍历结束后,全局变量的值就是答案。代码如下

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution
{
private int total = 0;

public int sumNumbers(TreeNode root)
{
sumNumbers(root, 0);
return total;
}

private void sumNumbers(TreeNode root, int num)
{
if (root == null)
{
return;
}

num = num * 10 + root.val;
if (root.left == null && root.right == null)
{
total += num;
return;
}

sumNumbers(root.left, num);
sumNumbers(root.right, num);
}
}