恢复二叉树

时间:2016-10-12 04:22:15

标签: python if-statement recursion binary-search-tree traversal

对于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。但实际情况似乎并非如此。有人可以解释一下这里发生的事情吗?

1 个答案:

答案 0 :(得分:0)

代码不同,因为您仍想运行self.second = root。您希望在开始播放之前self.firsttruefalse 时运行此行。

可能会有self.firsttrue且预期结果为self.second == root的测试。