Today I chose an easy problem since I had a late day at work and gym afterwards.


Solution

from collections import deque

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
        pQ = deque([p])
        qQ = deque([q])

        while pQ and qQ:
            nodeP = pQ.popleft()
            nodeQ = qQ.popleft()
            if nodeP and nodeQ and nodeP.val != nodeQ.val:
                return False
            elif (nodeP is None) != (nodeQ is None):
                return False

            if nodeP:
                pQ.append(nodeP.left)
                pQ.append(nodeP.right)
            if nodeQ:
                qQ.append(nodeQ.left)
                qQ.append(nodeQ.right)

        if not pQ and not qQ:
            return True
        
        return False

Time complexity is O(n) = n and space complexity is O(n).