в чем разница между моим кодом и решением, которое проверяет, идентичны ли два двоичных дерева?

#python #tree

Вопрос:

Я пишу код, чтобы проверить, совпадают ли два дерева, но мне нужна помощь, чтобы определить, чем отличается написанный мной код от фактического решения.

вот мой код:

 class Solution:
    def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
        if not p or not q:
            return False
        if not p and not q:
            return True
        if p.val != q.val:
            return False

        return self.isSameTree(p.right,q.right) and self.isSameTree(p.left,q.left)
 

И вот правильный код:

 class Solution:
    def isSameTree(self, p, q):
        
        if not p and not q:
            return True

        if not q or not p:
            return False
        if p.val != q.val:
            return False
        return self.isSameTree(p.right, q.right) and 
               self.isSameTree(p.left, q.left)
 

Комментарии:

1. if not p and not q: никогда не будет правдой в вашей версии, потому что предыдущая if уже имела бы дело с этим (более сильным) условием. Порядок важен.

Ответ №1:

Условие if not p or not q: содержит случай, когда p и q отсутствуют, и в этом случае два дерева, очевидно, совпадают, когда в вашем коде вы возвращаетесь False .