对于leet代码的this问题,此代码传递了所有测试用例。
class Solution(object):
def recoverTree(self, root):
self.first = None
self.second = None
self.prev = TreeNode(float('-inf'))
self.traverse(root)
temp = self.first.val
self.first.val = self.second.val
self.second.val = temp
def traverse(self, root):
if not root:
return
self.traverse(root.left)
if not self.first and self.prev.val >= root.val:
self.first = self.prev
if self.first and self.prev.val >= root.val:
self.second = root
self.prev = root
self.traverse(root.right)
我对此代码的一部分有疑问。
if not self.first and self.prev.val >= root.val:
self.first = self.prev
if self.first and self.prev.val >= root.val:
self.second = root
在这个片段中,第一个条件设置后,第二个条件总是不正确。所以,你可以把它写成:
def not self.first and self.prev.val >= root.val:
self.first = self.prev
self.second = root
但是如果我试试这个,我就不会通过测试用例。为什么会这样?似乎我们接受first if语句的条件,并为self.first指定条件,if语句将始终为true。但实际情况似乎并非如此。有人可以解释一下这里发生的事情吗?
答案 0 :(得分:0)
代码不同,因为您仍想运行self.second = root
。您希望在开始播放之前self.first
是true
或false
时运行此行。
可能会有self.first
为true
且预期结果为self.second == root
的测试。