解法一:递归法

  1. class Solution:
  2. def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
  3. if not p and not q:
  4. return True
  5. if not p or not q:
  6. return False
  7. return p.val == q.val and self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)

解法二:迭代法

  1. class Solution:
  2. def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
  3. if not p and not q:
  4. return True
  5. if not p or not q:
  6. return False
  7. queue1 = collections.deque([p])
  8. queue2 = collections.deque([q])
  9. while queue1 and queue2:
  10. node1 = queue1.popleft()
  11. node2 = queue2.popleft()
  12. if node1.val != node2.val:
  13. return False
  14. left1, right1 = node1.left, node1.right
  15. left2, right2 = node2.left, node2.right
  16. if (not left1) ^ (not left2):
  17. return False
  18. if (not right1) ^ (not right2):
  19. return False
  20. if left1:
  21. queue1.append(left1)
  22. if right1:
  23. queue1.append(right1)
  24. if left2:
  25. queue2.append(left2)
  26. if right2:
  27. queue2.append(right2)
  28. return not queue1 and not queue2