我对leetcode上的第426号问题感到非常困惑,因为我认为答案是正确的。但是运行后表明我错了。以下是问题和我的原始答案:
"""
# Definition for a Node.
class Node:
def __init__(self, val, left, right):
self.val = val
self.left = left
self.right = right
"""
class Solution:
def treeToDoublyList(self, root):
"""
:type root: Node
:rtype: Node
"""
if root:
sign = True
stack = []
node = root
while stack or node:
if node:
stack.append(node)
node = node.left
else:
node = stack.pop()
if sign:
pre,head = node, node
else:
pre.right = node
node.left = pre
pre = node
node = node.right
head.left = pre
pre.right = pre
return head
else:
return None
有人可以帮我弄清楚我的代码有什么问题吗?任何评论或建议将不胜感激。
答案 0 :(得分:2)
我看到代码有两个问题。
首先,在您的if sign:
块中,您需要设置sign = False
,因为您只想初始化head
一次并仅在第一次执行该块。 (不确定为什么将变量称为sign
,也许first
会更合适,或者只是针对该条件重用head = None
也会起作用。)
第二个bug较小,并且会影响列表中的最后一个链接以使其循环。您想要设置pre.right = head
而不是pre
,以便列表的最后一个节点指向第一个节点,而不是指向自身。
我还没有真正测试过它,所以可能我遗漏了一些东西,但是在我看来,这应该足以修复此代码。