Sum Root to Leaf Numbers <leetcode>
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
.
算法:本体很简单,二叉树的遍历,主要是考虑一些细节,代码如下:
1 /** 2 * Definition for binary tree 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 struct node 11 { 12 TreeNode *root; 13 int val; 14 }; 15 class Solution { 16 public: 17 int result; 18 bool k=true; 19 int sumNumbers(TreeNode *root) { 20 if(NULL==root) return 0; 21 result=0; 22 vector<node> temp; 23 temp.clear(); 24 doit(root,temp); 25 return result; 26 } 27 28 void doit(TreeNode* &root,vector<node> temp) 29 { 30 if(NULL==root->left&&NULL==root->right) 31 { 32 if(k) result+=root->val; 33 34 else result+=temp.back().val*10+root->val; 35 return; 36 } 37 else 38 { 39 node n; 40 if(k) 41 { 42 n.val=root->val; 43 k=false; 44 } 45 else n.val=temp.back().val*10+root->val; 46 n.root=root; 47 temp.push_back(n); 48 if(NULL!=root->left) 49 { 50 doit(root->left,temp); 51 } 52 if(NULL!=root->right) 53 { 54 doit(root->right,temp); 55 } 56 } 57 } 58 };