繁体   English   中英

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

[英]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显式设置为零,并且不要将其声明为局部循环变量:

res = 0;
for(int i = q.size() - 1; i >= 0; i--)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM