100 相同的树
给你两棵二叉树的根节点 p
和 q
,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
输入:p = [1,2,3], q = [1,2,3]
输出:true
输入:p = [1,2], q = [1,null,2]
输出:false
输入:p = [1,2,1], q = [1,1,2]
输出:false
# 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:
# 非递归
if not p and not q:return True
if not p or not q or p.val != q.val:return False
from collections import deque
# def BFS(p, q):
que1 = deque([p])
que2 = deque([q])
while que1 and que2:
leftnode = que1.popleft()
rightnode = que2.popleft()
if not leftnode and not rightnode:continue
elif not leftnode and rightnode:
return False
elif not rightnode and leftnode:
return False
elif leftnode.val != rightnode.val:
return False
que1.append(leftnode.left)
que1.append(leftnode.right)
que2.append(rightnode.left)
que2.append(rightnode.right)
if que1 or que2:
return False
return True
# return BFS(p, q)
# 递归
# if not p and not q:
# return True
# elif not p and q:
# return False
# elif not q and p:
# return False
# elif p.val != q.val:
# return False
# else:
# return self.isSameTree(p.left,q.left) and self.isSameTree(p.right, q.right)