如果不检查空的根,为什么我会得到以下代码的运行时错误



如果我不检查(如果不是root(,我将收到一个运行时错误。我试着做一些研究,但我不知道为什么。有人能解释一下幕后发生了什么吗?

我收到的运行时错误:

运行时错误消息:第18行:AttributeError:"NoneType"对象没有属性"val">

class TreeNode(object):
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def levelOrderBottom(self, root):
if not root:
return []
que = []
que.append(root)
res = []
while que:
temp = []

for i in range(len(que)):
node = que.pop(0)
temp.append(node.val)
if node.left:
que.append(node.left)
if node.right:
que.append(node.right)
res.append(temp)
return res[::-1]

假设root = None并通读您的代码。会发生什么?

当while循环开始时,我们将有

que = [None]
res = []

由于que不为空,while循环将运行。由于len(que) == 1,for循环也将运行。在第一次迭代中,它将运行node = que.pop(0)。因此

node = None

在下一行中,您的代码将运行temp.append(node.val)。这就是错误的原因。None没有val属性。当node = None导致引发AttributeError时,尝试调用node.val

最新更新