题目描述
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例1:
![2cccb94777c73b7f50d935a3a2fad4fa.png](https://img-blog.csdnimg.cn/img_convert/2cccb94777c73b7f50d935a3a2fad4fa.png)
示例2:
![ad33997cffe10ead99be2eb34eb79d38.png](https://img-blog.csdnimg.cn/img_convert/ad33997cffe10ead99be2eb34eb79d38.png)
解题思路
二叉树本身就是一种递归的数据结构,所以要判断两个二叉树是否相同,很自然地想到了用递归的方法求解。具体来说,采用先序遍历两个二叉树,首先比较根节点,如果根节点不同,那么直递归结束,否则,比较两个二叉树的左子树,若左子树相同,再比较右子树。
代码实现
class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: def isSameTree(self, p: TreeNode, q: TreeNode) -> bool: # 递归出口, 根不相等/两个都是叶子节点 lval = p.val if p is not None else None rval = q.val if q is not None else None if lval != rval: return False if p is None and q is None: return True # 比较left pleft = p.left if p is not None else None qleft = q.left if q is not None else None leftSame = self.isSameTree(pleft, qleft) if not leftSame: return False # 比较right pright = p.right if p is not None else None qright = q.right if q is not None else None rightSame = self.isSameTree(pright, qright) if not rightSame: return False return True
更多leetcode题解敬请期待。
![313819093ff8342bcf93cbdfc435564a.png](https://img-blog.csdnimg.cn/img_convert/313819093ff8342bcf93cbdfc435564a.png)