困在LeetCode问题上94.二叉树顺序遍历(Python)
问题就在这里
https://leetcode.com/problems/binary-tree-inorder-traversal/description/
我的问题是,在while循环的最后一行,显然有一个节点分配给变量node。但在第一行中,它表示没有为变量“node”赋值。而且,这似乎只发生在通过while循环的几个循环之后。第一行和最后一行之间会发生什么?对于前几个循环,“node”的值在while循环的第一行和最后一行之间完全相同。第三次,发生了变化
这是迄今为止我能找到的解决方案
# 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
这是它给我的错误信息
Line 23: AttributeError: 'NoneType' object has no attribute '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语句中可以看出,在while
循环的最后一行,有一个节点被分配给变量node
,但在第一行,我得到一个错误,表示变量node
没有分配任何内容
在下一轮的第一行while循环的最后一行之前会发生什么
多亏@zvone的建议,在while循环之前放一个print语句,我才知道它一直在leetcode上打印所有的测试用例。其中一个案例没有输入新节点。除非你建议在while循环之前放一个print语句,否则我不会发现这一点
相关问题 更多 >
编程相关推荐