[英]Can someone explain the difference between these two codes ? Code is to find the sum of deepest leaves in tree
这是一个 Leetcode 问题
int deepestLeavesSum(TreeNode* root) {
int res=0;
int i;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
for(i = q.size()-1,res=0;i>=0;i--){
TreeNode* temp = q.front();
q.pop();
res += temp->val;
if(temp->left)q.push(temp->left);
if(temp->right)q.push(temp->right);
}
}
return res;
}
VS
int deepestLeavesSum(TreeNode* root) {
int res=0;
// int i;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
for(int i = q.size()-1,res=0;i>=0;i--){
TreeNode* temp = q.front();
q.pop();
res += temp->val;
if(temp->left)q.push(temp->left);
if(temp->right)q.push(temp->right);
}
}
return res;
}
第一个给出正确的答案,而第二个没有。 有人能告诉我为什么在外面声明 int i 是正确的方法吗?
在第二个中,您已将i
和res
定义为循环中的局部变量:
for(int i = q.size()-1, res = 0; i >= 0; i--)
这隐藏了int res = 0;
函数顶部的定义。 所以当循环退出时, res
仍然为零。
在第一个示例中,您每次在 while 循环中都将res
重置为零。 虽然不清楚这是否正确,但在第二个示例中要做的等效操作(与第一个示例相同)是在 for 循环之前将res
显式设置为零,并且不要将其声明为局部循环变量:
res = 0;
for(int i = q.size() - 1; i >= 0; i--)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.