【发布时间】:2017-02-20 18:37:51
【问题描述】:
对于有关 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
在这个 sn-p 中,在设置第一个条件后,第二个条件不会总是为真。所以,你可以写成:
def not self.first and self.prev.val >= root.val:
self.first = self.prev
self.second = root
但如果我尝试这样做,我将无法通过测试用例。为什么会这样?似乎如果我们接受第一个 if 语句的条件,并分配 self.first,第二个 if 语句的条件将始终为真。但实际上情况似乎并非如此。有人可以解释一下这里发生了什么吗?
【问题讨论】:
-
第二个if语句中没有not
-
@Natecat 但如果第一个 if 语句为真,如 self.first 为 None,那么当我们进入语句时,我们设置 self.first = self.prev,然后 self.First 为否更长的无,第二个 if 语句的条件将始终为真。
标签: python if-statement recursion binary-search-tree traversal