17
17
Return the sum = 12 + 13 = 25.
18
18
19
19
Solution: 1. Recursion (add to sum when reaching the leaf).
20
- 2. Iterative solution.
21
20
*/
22
21
22
+
23
23
/**
24
24
* Definition for binary tree
25
- *struct TreeNode {
25
+ *public class TreeNode {
26
26
* int val;
27
- * TreeNode* left;
28
- * TreeNode* right;
29
- * TreeNode(int x): val(x), left(NULL), right(NULL) { }
30
- * };
27
+ * TreeNode left;
28
+ * TreeNode right;
29
+ * TreeNode(int x){ val = x; }
30
+ * }
31
31
*/
32
- class Solution {
33
- public :
34
- int sumNumbers (TreeNode *root ) {
35
- return sumNumbers_1 (root );
36
- }
37
-
38
- int sumNumbers_1 (TreeNode *root ) {
39
- int sum =0 ;
40
- sumNumbersRe (root ,0 ,sum );
41
- return sum ;
42
- }
43
-
44
- void sumNumbersRe (TreeNode *node ,int num ,int &sum ) {
45
- if (!node )return ;
46
- num =num *10 +node ->val ;
47
- if (!node ->left && !node ->right ) {
48
- sum +=num ;
49
- return ;
50
- }
51
- sumNumbersRe (node ->left ,num ,sum );
52
- sumNumbersRe (node ->right ,num ,sum );
32
+ public class Solution {
33
+ public int sumNumbers (TreeNode root ) {
34
+ if (root ==null )return 0 ;
35
+ return sumNumbersRe (root ,0 );
53
36
}
54
-
55
- int sumNumbers_2 (TreeNode *root ) {
56
- if (!root )return 0 ;
57
- int res =0 ;
58
- queue <pair <TreeNode *,int >>q ;
59
- q .push (make_pair (root ,0 ));
60
- while (!q .empty ())
61
- {
62
- TreeNode *node =q .front ().first ;
63
- int sum =q .front ().second *10 +node ->val ;
64
- q .pop ();
65
- if (!node ->left && !node ->right )
66
- {
67
- res +=sum ;
68
- continue ;
69
- }
70
- if (node ->left )
71
- q .push (make_pair (node ->left ,sum ));
72
- if (node ->right )
73
- q .push (make_pair (node ->right ,sum ));
74
- }
75
- return res ;
37
+ public int sumNumbersRe (TreeNode root ,int last ) {
38
+ if (root ==null )return 0 ;
39
+ int res =last *10 +root .val ;
40
+ if (root .left ==null &&root .right ==null )return res ;
41
+ if (root .left ==null )return sumNumbersRe (root .right ,res );
42
+ if (root .right ==null )return sumNumbersRe (root .left ,res );
43
+ return sumNumbersRe (root .left ,res ) +sumNumbersRe (root .right ,res );
76
44
}
77
- };
45
+ }