1+ /* *
2+ * Definition for a binary tree node.
3+ * struct TreeNode {
4+ * int val;
5+ * TreeNode *left;
6+ * TreeNode *right;
7+ * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+ * };
9+ */
10+ class Solution {
11+ public:
12+ void util (TreeNode *root, int &csum, int &gsum){
13+ if (!root) return ;
14+ csum = csum * 10 + root->val ;
15+ if (root->left == NULL && root->right == NULL )
16+ gsum += csum;
17+ util (root->left , csum, gsum);
18+ util (root->right , csum, gsum);
19+ csum /= 10 ; // once we reach one of the bottom of tree, then we start going up from root->left to root to root->right;
20+ }
21+
22+ int util_try (TreeNode *root, int val){
23+ if (!root) return 0 ;
24+ val = val * 10 + root->val ;
25+ if (!root->left && !root->right )
26+ return val;
27+ return util_try (root->left , val) + util_try (root->right , val);
28+ }
29+
30+ int util_try_iter (TreeNode *root){
31+ if (!root) return 0 ;
32+
33+ queue<TreeNode*> nodeQ;
34+ queue<int > sumQ;
35+ nodeQ.push (root);
36+ sumQ.push (root->val );
37+ int gsum = 0 ;
38+
39+ while (!nodeQ.empty ()){
40+ TreeNode *curr = nodeQ.front ();
41+ nodeQ.pop ();
42+
43+ int csum = sumQ.front ();
44+ sumQ.pop ();
45+
46+ if (!curr->left && !curr->right ) // basecase
47+ gsum += csum;
48+
49+ if (curr->left ){
50+ nodeQ.push (curr->left ); // ok..
51+ sumQ.push ((csum * 10 ) + curr->left ->val ); // not so ok..
52+ }
53+
54+ if (curr->left ){
55+ nodeQ.push (curr->right ); // ok..
56+ sumQ.push ((csum * 10 ) + curr->right ->val ); // not so ok..
57+ }
58+ }
59+ return gsum;
60+ }
61+
62+ int sumNumbers (TreeNode* root) {
63+ if (root == NULL ) return 0 ;
64+ int csum = 0 , gsum = 0 ;
65+ return util_try (root,csum);
66+ }
67+ };
0 commit comments