我的程序有问题。代码如下:
def getHeight(self,root):
#Write your code here
if not root:
return -1
if root.left:
i = self.getHeight(root.left) + 1
if root.right:
j = self.getHeight(root.right) + 1
return max(i, j)
引发错误:
Traceback (most recent call last):
File "solution.py", line 37, in
height=myTree.getHeight(root)
File "solution.py", line 23, in getHeight
i = self.getHeight(root.left) + 1
File "solution.py", line 23, in getHeight
i = self.getHeight(root.left) + 1
File "solution.py", line 27, in getHeight
return max(i, j)
UnboundLocalError: local variable 'i' referenced before assignment
如果我添加i, j = 0, 0
,它会运作良好。
以下代码:
if True:
i = 1 + 1
代码在没有初始化的情况下运行良好。 有人可以解释一下这个区别吗?
答案 0 :(得分:1)
当您编写i, j = 0, 0
时,您正在将这两个变量初始化为0
。
当您撰写i = 1 + 1
时,您正在将i
初始化为2
,因为这位于if True
内,该代码 始终< / em> 已执行。因此,您不需要编写if True
,因为它会产生相同的效果。
要清楚,在阅读之前总是需要初始化变量。总是。我所说的是,你的代码的两个更正确实正在初始化这些变量。这就是他们工作的原因。
答案 1 :(得分:0)
条件总是如此。
需要定义变量才能使用。如果条件为假,则不定义变量。
您可以使用三元语句来缓解问题
def getHeight(self,root):
if not root:
return -1
i = self.getHeight(root.left) + 1 if root.left else 0
j = self.getHeight(root.right) + 1 if root.right else 0
return max(i, j)
答案 2 :(得分:0)
我认为你应该在引用之前初始化变量。 在你的代码中,max函数以i,j为参数。因此,i,j需要初始化。 if语句无法确保初始化,因此编译器会给你错误。
如果为真:i = 1 + 1
此代码只为i赋值2.