2->3 代表数字 123。 找出所有根到叶数的总和 % 1003。 例子: 如果 1 是根节-6ren">
gpt4 book ai didi

c++ - "sum root to leaf numbers"问题的解决方案

转载 作者:行者123 更新时间:2023-11-30 04:47:26 25 4
gpt4 key购买 nike

给定一棵仅包含 0-9 数字的二叉树,每个根到叶的路径都可以代表一个数字。

一个例子是根到叶的路径 1->2->3 代表数字 123。

找出所有根到叶数的总和 % 1003。

例子:
如果 1 是根节点,它的左 child 是 2,右 child 是 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;
}

最佳答案

线

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;
}

关于c++ - "sum root to leaf numbers"问题的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56238804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com