有人可以解释这两个代码之间的区别吗?代码是求树中最深叶子的总和
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
设置为零-loop 并且不将其声明为局部循环变量:
res = 0;
for(int i = q.size() - 1; i >= 0; i--)
这是一道 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
设置为零-loop 并且不将其声明为局部循环变量:
res = 0;
for(int i = q.size() - 1; i >= 0; i--)