Sum Root to Leaf Numbers - Codeprg

Breaking

programing News Travel Computer Engineering Science Blogging Earning

Thursday, 20 August 2020

Sum Root to Leaf Numbers


Sum Root to Leaf Numbers

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.

Note: A leaf is a node with no children.

Example:

Input: [1,2,3]
    1
   / \
  2   3
Output: 25
Explanation:
The root-to-leaf path 1->2 represents the number 12.
The root-to-leaf path 1->3 represents the number 13.
Therefore, sum = 12 + 13 = 25.

Example 2:

Input: [4,9,0,5,1]
    4
   / \
  9   0
 / \
5   1
Output: 1026
Explanation:
The root-to-leaf path 4->9->5 represents the number 495.
The root-to-leaf path 4->9->1 represents the number 491.
The root-to-leaf path 4->0 represents the number 40.
Therefore, sum = 495 + 491 + 40 = 1026.

 /**

 * Definition for a binary tree node.

 * struct TreeNode {

 *     int val;

 *     TreeNode *left;

 *     TreeNode *right;

 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}

 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}

 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}

 * };

 */

class Solution {

public:

    

//     int findpathsum(TreeNode* root,int ans)

//     {

        

//             if(root==NULL)return 0;

//              if(!root->left&&!root->right)

//               return ans*10+root->val;

//             ans=(ans*10+root->val);

          

//           return findpathsum(root->left,ans)+findpathsum(root->right,ans);

//     }

    int curr=0,ans=0;

    void dfs(TreeNode* root)

    {

        curr=curr*10+root->val;

         if(!root->left&&!root->right)

         {

             ans+=curr;

         }

        if(root->left)

        {

            dfs(root->left);

        }

        if(root->right)

        {

            dfs(root->right);

        }

        curr/=10;

    }

    int sumNumbers(TreeNode* root) {

        // return findpathsum(root,0);

        if(!root)

            return 0;

        dfs(root);

        return ans;

        

    }

};