给出一个仅包含0-9数字的二叉树,每条从根到叶的路径都可以代表一个数字。
一个示例是从根到叶的路径1-> 2-> 3,它代表数字123。
找到所有根到叶百分比%1003的总和。
示例:
如果1是根,则其左子节点为2,右子节点为3,
根到叶的路径1-> 2代表数字12。
根到叶的路径1-> 3代表数字13。
返回总和=(12 + 13)%1003 = 25%1003 = 25.
原始问题is here
P.S:这不是家庭作业,我正在为大学课程做准备。
我的尝试:
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
void DFS(TreeNode* root, string &temp, int *ans){
if(!root)
return;
temp = temp + to_string(root->val);
if(root->left == NULL && root->right == NULL && temp.length()!=0){
*ans = (*ans + stoi(temp))%1003;
}
if(!root->left)
DFS(root->left, temp, ans);
if(!root->right)
DFS(root->right, temp, ans);
if(!temp.empty())
temp.pop_back();
}
int Solution::sumNumbers(TreeNode* A) {
string temp = "";
int ans = 0;
DFS(A, temp, &ans);
return ans%1003;
}
答案 0 :(得分:1)
行
if(!root->left) DFS(root->left, temp, ans);
应该是
if(root->left) DFS(root->left, temp, ans);
对于正确的节点也是如此。基本上,如果有节点存在,您永远也不会陷入困境。
或者,您可以简化代码:
temp
变量,则不必“ pop_back”最后一位。DFS
时不检查指针是否为空,因为它已经在开始时进行了检查。DFS
中完成。void DFS(TreeNode* root, int temp, int *ans){
if(!root)
return;
temp = temp*10 + root->val;
if(!root->left && !root->right)
*ans = (*ans + temp)%1003;
DFS(root->left, temp, ans);
DFS(root->right, temp, ans);
}
int Solution::sumNumbers(TreeNode* A) {
int ans = 0;
DFS(A, 0, &ans);
return ans;
}