forked from rpj911/LeetCode_algorithm
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSumNumbers.java
More file actions
67 lines (51 loc) · 1.71 KB
/
SumNumbers.java
File metadata and controls
67 lines (51 loc) · 1.71 KB
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package Algorithms.tree;
import java.util.ArrayList;
/*
*
* Sum Root to Leaf Numbers Total Accepted: 23940 Total Submissions: 80436 My Submissions
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number.
An example is the root-to-leaf path 1->2->3 which represents the number 123.
Find the total sum of all root-to-leaf numbers.
For example,
1
/ \
2 3
The root-to-leaf path 1->2 represents the number 12.
The root-to-leaf path 1->3 represents the number 13.
Return the sum = 12 + 13 = 25.
* */
public class SumNumbers {
public int sumNumbers(TreeNode root) {
if (root == null) {
return 0;
}
ArrayList<Integer> ret = new ArrayList<Integer>();
// 存储从根节点到当前节点的路径上的数字
ArrayList<Integer> path = new ArrayList<Integer>();
dfs(root, path, ret);
int sum = 0;
for (int n: ret) {
sum += n;
}
return sum;
}
public void dfs(TreeNode root, ArrayList<Integer> path, ArrayList<Integer> ret) {
if (root == null) {
return;
}
path.add(root.val);
if (root.left == null && root.right == null) {
int num = 0;
for (int n: path) {
num = num * 10 + n;
}
ret.add(num);
} else {
// 向左右子树递归
dfs(root.left, path, ret);
dfs(root.right, path, ret);
}
// 一定要记得回溯,也就是说递归不能修改Path本身,否则以上向左右子树分别递归时 path就会被改。
path.remove(path.size() - 1);
}
}