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 path1->3 represents the number 13 .
The root-to-leaf path
Return the sum = 12 + 13 = 25 .
這題是典型的 DFS 題目
首先先看 recursive 的寫法
思路不困難,就是歷遍然後求和
code 如下
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Definition for a binary tree node. | |
* struct TreeNode { | |
* int val; | |
* TreeNode *left; | |
* TreeNode *right; | |
* TreeNode(int x) : val(x), left(NULL), right(NULL) {} | |
* }; | |
*/ | |
class Solution { | |
public: | |
int sumNumbers(TreeNode* root) { | |
return sumDFS(root, 0); | |
} | |
int sumDFS(TreeNode *node, int sum) { | |
if(!node) { | |
return 0; | |
} | |
sum = sum * 10 + node->val; | |
if(!node->left && !node->right) { | |
return sum; | |
} | |
return sumDFS(node->left, sum) + sumDFS(node->right, sum); | |
} | |
}; |
不同的地方是使用一個 stack 來完成歷遍
code 如下
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Definition for a binary tree node. | |
* struct TreeNode { | |
* int val; | |
* TreeNode *left; | |
* TreeNode *right; | |
* TreeNode(int x) : val(x), left(NULL), right(NULL) {} | |
* }; | |
*/ | |
class Solution { | |
public: | |
int sumNumbers(TreeNode* root) { | |
if(!root) { | |
return 0; | |
} | |
stack<pair<TreeNode*, int>> treeStack; | |
treeStack.push({root, root->val}); | |
int ans = 0; | |
while(!treeStack.empty()) { | |
const TreeNode *node = treeStack.top().first; | |
const int sumVal = treeStack.top().second; | |
treeStack.pop(); | |
if(!node->left && !node->right) { | |
ans += sumVal; | |
continue; | |
} | |
if(node->right) { | |
treeStack.push({node->right, sumVal * 10 + node->right->val}); | |
} | |
if(node->left) { | |
treeStack.push({node->left, sumVal * 10 + node->left->val}); | |
} | |
} | |
return ans; | |
} | |
}; |
沒有留言:
張貼留言