0
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
このスニペットでは、最初の条件が設定されてから2番目の条件は常に真ではありません。だから、あなたはとしてそれを書くcoud:
def not self.first and self.prev.val >= root.val:
self.first = self.prev
self.second = root
しかし、私はこれをしようと、私はテストケースを渡しません。それはなぜですか?最初のifステートメントの条件を受け入れ、self.firstを代入すると、次のifステートメントが常に真になるように見えます。しかし、現実にはこれは当てはまらないようです。誰かがここで起こっていることを説明できますか?
二番目のif文にはありません。 – Natecat
@Natecatですが、最初のif文がtrueの場合、self.firstがNoneの場合、ステートメントに入るとself.first = self.prev、self .FirstはもはやNoneではなく、2番目のif文の条件は常に真です。 – user3408657