这个题解采用递归的方式来判断两棵二叉树是否相同。首先判断当前两个节点 p 和 q 是否同时为 None,如果是则说明遍历到了叶子节点且两棵树一直相同,返回 True。如果当前两个节点都不为 None 且节点值相同,则递归判断它们的左右子树是否相同。只要有一个节点为 None 或者节点值不同,则说明两棵树不同,返回 False。
时间复杂度: O(min(m,n))
空间复杂度: O(min(h1,h2))
# 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:
# 如果两个节点都为None,说明遍历到了叶子节点且一直相同,返回True
if p is None and q is None:
return True
# 如果两个节点都不为None且节点值相同,递归判断左右子树
if p is not None and q is not None and p.val == q.val:
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
# 其他情况说明两棵树不同,返回False
else:
return False