要求
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1:
输入:p = [1,2,3], q = [1,2,3]
输出:true
示例 2:
输入:p = [1,2], q = [1,null,2]
输出:false
示例 3:
输入:p = [1,2,1], q = [1,1,2]
输出:false
代码详解
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: TreeNode, q: TreeNode) -> bool:
if not p and not q:
return True
self.result = True
self.check(p,q)
return self.result
def check(self,p,q):
if (not q or not p) or (p.val != q.val):
self.result = False
return
if p.left or q.left:
self.check(p.left,q.left)
if p.right or q.right:
self.check(p.right,q.right)
return
简便代码
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: TreeNode, q: TreeNode) -> bool:
if not p:
return not q
if not q:
return not p
return q.val == p.val and self.isSameTree(p.left,q.left) and self.isSameTree(p.right,q.right)
解题思路:这道题的思路和单值二叉树的思路差不多,都是我们留存一个状态,在遍历的过程中,我们去监测这个状态,一旦发生不同,状态的值发生改变,最后输出状态的值即可判断出两棵树是不是相同的。