坚持LeetCode问题94。二叉树有序遍历(Python)。
这是问题
https://leetcode.com/problems/binary-tree-inorder-traversal/description/
我的问题是,在while循环的最后一行,显然有一个节点分配给了变量“ node”。但是在第一行,它说什么都没有分配给变量“节点”。同样,这似乎仅在while循环中经过几个循环之后才发生。第一行和最后一行之间会发生什么?对于前几个循环,while循环的第一行和最后一行之间的“ node”值完全相同。第三次,发生更改。
这是我到目前为止可以解决的办法
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res = []
rootTrack = []
rootCovered = []
rootTrack.append(root)
i=0
while rootTrack:
print('right after while loop re-enter', root.val)
while root.left and root.left not in rootCovered:
root = root.left
print('left value ', root.val)
rootTrack.append(root)
if len(rootTrack) > 0:
root = rootTrack.pop()
res.append(root.val)
rootCovered.append(root)
print('pop value ', root.val)
if root.right and root.right not in rootCovered:
root = root.right
print('right value ', root.val)
rootTrack.append(root)
print('final before while loop re-enter ', root.val)
return res
这是它给我的错误消息
第23行:AttributeError:“ NoneType”对象没有属性“ val”
指的是这一行代码
print('right after while loop re-enter', root.val)
这是标准输出
right after while loop re-enter 1
pop value 1
right value 2
final before while loop re-enter 2
right after while loop re-enter 2
left value 3
pop value 3
final before while loop re-enter 3
right after while loop re-enter 3
pop value 2
final before while loop re-enter 2
从print语句中,您可以知道在node
循环的最后一行,有一个节点分配给变量while
,但是在第一行,这就是我得到的错误,表明没有为变量node
分配任何内容。
在下一轮第一行的while循环的最后一行之前会发生什么?
答案 0 :(得分:0)
由于@zvone建议在while循环之前放置一个print语句,所以我能够弄清楚它继续在leetcode上打印所有测试用例。其中一种情况是未输入新节点。除非您建议在while循环之前放置一个打印语句,否则我不会发现这一点。