有人可以解释这两个代码之间的区别吗?代码是求树中最深叶子的总和

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 是正确的方法吗?

在第二个中,您已将 ires 都定义为循环中的局部变量:

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--)