本文正在参与掘金团队号上线活动,点击 查看大厂春招职位
一、题目描述
给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1 :
输入:p = [1,2,3], q = [1,2,3]
输出:true
示例 2 :
输入:p = [1,2], q = [1,null,2]
输出:false
二、思路分析
- 如果
两个二叉树都为空,则两个二叉树相同。 - 如果
两个二叉树中有且只有一个为空,则两个二叉树一定不相同。 - 如果
两个二叉树都不为空,那么首先判断它们的根节点的值是否相同,
- 若
不相同,则两个二叉树一定不同, - 若
相同,再分别判断两个二叉树的左子树是否相同以及右子树是否相同。
这是一个递归的过程,因此可以使用深度优先搜索(DFS),递归地判断两个二叉树是否相同。
三、AC 代码
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)
输出为:
四、总结
该题是一道利用深度优先搜索(DFS)实现代码的题。从这道题体会到,理论很简单,思路需打开。在解决二叉树问题的时候可以优先想到用深度优先搜索(DFS)的方式进行解答。