今天刷leetcode二叉树的最小深度这道题时犯了一个错误,浅浅记录一下
原始代码如下,当我希望根据当前所在结点左右子树情况的不同更新result时,我错误地在if语句的函数体内声明变量result,我原来以为这样不管函数进入哪一条if分支都会创建变量result,但实际上这样忽略了变量的作用域,也就是说分支内的变量result只在分支内有效,因此这样会导致错误。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int minDepth(TreeNode* root) {
if(root==nullptr) return 0;
int left=minDepth(root->left);
int right=minDepth(root->right);
if(root->left==nullptr&&root->right!=nullptr){
int result=right+1;}
else if(root->left!=nullptr&&root->right==nullptr){
int result=left+1;}
else{
int result=(left<right?left:right)+1;}
return result;
}
};
如下面这个例子所示,当多个分支内都重新声明了同名的变量,实际上你创建了多个独立的变量,而不是对同一个变量进行不同的赋值。这可能导致变量作用域错误和预期外的结果。
下面这个示例可以来解释这个问题:
#include <iostream>
int main() {
int x = 10;
if (x > 5) {
int result = x + 5;
std::cout << "Inside if: " << result << std::endl;
}
{
int result = x - 5;
std::cout << "Inside block: " << result << std::endl;
}
std::cout << "Outside: " << x << std::endl;
return 0;
}
在这个示例中,我们定义了一个变量 x 并初始化为 10。然后我们有两个分支,一个是 if 语句块内,另一个是一个单独的代码块(使用花括号 {} 定义)。每个分支内都有一个名为 result 的变量,但它们的作用域是局部的,只在各自的分支内有效。
结果输出可能是:
Inside if: 15
Inside block: 5
Outside: 10
正如你可以看到的,尽管两个分支都有一个叫做 result 的变量,但它们并不相互影响,因为它们位于不同的作用域中。如果我们只想在不同的分支内赋值同一个变量,我们应该避免重新声明该变量,而是直接在外部声明它,并在分支内对它进行赋值。
这也是为什么在的原始代码中,多次声明了同名的 result 变量会导致错误的原因。正确的方法是在合适的作用域内声明一次变量,然后在不同的分支内对它进行赋值,从而确保变量在整个函数内都是有效的。

881

被折叠的 条评论
为什么被折叠?



