我是蟒蛇新手-.- 以下代码是我在leetcode上写的代码:
def postorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
result, stack, current, last_traversed = [], [], root, None
while stack or current:
if current:
stack.append(current)
current = current.left
else:
parent = stack[-1]
if parent.right in (None, last_traversed):
result.append(parent.val)
last_traversed = stack.pop()
else:
current = parent.right
return result
显然可行,但我过去常常用parent
替换所有current
,程序会给我“超出时间限制”的结果。
我想知道为什么我不能简单地在整个代码中使用current
。为什么我必须为父节点创建另一个变量?
答案 0 :(得分:2)
在以if parent.right
开头的分支中,parent
已设置,但current
未设置。因此,如果将其替换为current
,则行为会有所不同。
答案 1 :(得分:1)
如果stack为true,则current为False,stack [-1] .right是None和last_traversed中的一个,你不希望修改当前值。
这是关于算法的问题,而不是关于语言的问题。