【问题标题】:Recover Binary Tree恢复二叉树
【发布时间】: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


【解决方案1】:

代码不同,因为您仍想运行self.second = root。无论self.firsttrue 还是false,您都想运行此行你开始使用它之前。

可能有一个测试,其中self.firsttrue,而预期结果是self.second == root

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    相关资源
    最近更新 更多