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.
For example,
1 / \ 2 3
The root-to-leaf path
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
.Analysis:
Once we see this kind of problem, no matter what sum is required to output, "all root-to-leaf" phrase reminds us the classic Tree Traversal or Depth-First-Search algorithm. Then according to the specific problem, compute and store the values we need. Here in this problem, while searching deeper, add the values up (times 10 + current value), and add the sum to final result if meet the leaf node (left and right child are both NULL).Code(C++):
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: void dfs(TreeNode* root,int cur, int &res){ if (root->left==NULL && root->right==NULL){ cur=cur*10+root->val; res+=cur; }else{ cur=cur*10+root->val; if (root->left){ dfs(root->left,cur,res); } if (root->right){ dfs(root->right,cur,res); } } } int sumNumbers(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function int res=0; if (!root){return res;} dfs(root,0,res); return res; } };
Code(Python):
# Definition for a binary tree node # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: # @param root, a tree node # @return an integer res = 0 def search(self, root, path): if root.left == None and root.right == None: self.res += path + root.val else: if root.left != None: self.search(root.left, (path + root.val)*10) if root.right != None: self.search(root.right, (path + root.val)*10) def sumNumbers(self, root): self.res = 0 if root == None: return 0 else: self.search(root, 0) return self.res
No comments:
Post a Comment