100. 相同的树
-
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
-
如果两棵树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
-
思路: (递归法)
- 返回True的情况:
- 两棵树都为空
- 两棵树相同
- 返回False的情况:
- 两棵树不为空但节点分布不同或节点值不同不相同
- 两棵树有一个为空
- 注: 先判断是否为空, 再判断节点值是否相同
- 返回True的情况:
- # Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def isSameTree(self, p, q):
"""
:type p: Optional[TreeNode]
:type q: Optional[TreeNode]
:rtype: bool
"""
if not p and not q:
# 如果p,q都为空,返回True
return True
elif not p or not q:
# 如果p,q其中之一为空,返回False
return False
elif p.val != q.val:
# 如果根节点值不同,返回False
return False
else:
# 调用自身分别对p,q两树的左子树和右子树进行判别
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
- 时间复杂度: O(n)
- 空间复杂度: O(h),h是树的高度