100. 相同的树
给你两棵二叉树的根节点 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
提示:
两棵树上的节点数目都在范围 [0, 100] 内
-104 <= Node.val <= 104
解题:递归
这是一道经典的递归,与之前做的一道题395. 至少有K个重复字符的最长子串相类似
相对于数列与子数列(子串),二叉树也可以有相对应的概念,于是可以把所求树在判断中化为“子树”进行缩小范围
另外一点,对于isSameTree()
这个函数,我们不能简单的理解为对树的一个判断,本质上它是对结点的判断,只是递归的结构决定了它最终的功能
class Solution:
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
if not p and not q:
return True
elif not p or not q:
return False
elif p.val != q.val:
return False
else:
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)