给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1:
输入: 1 1
/ \ / \
2 3 2 3
[1,2,3], [1,2,3]
输出: true
示例 2:
输入: 1 1
/ \
2 2
[1,2], [1,null,2]
输出: false
示例 3:
输入: 1 1
/ \ / \
2 1 1 2
[1,2,1], [1,1,2]
输出: false
1、题目分析
题目给定两个树,判断两个树是不是完全相同。两个方法:①递归法②迭代法
2、解题分析
- 递归法
- 如果p和q都位空那就是相同的
- 如果有一个为空一个不为空那就是不相同的
- 递归的判断当前节点的值和相同,且两个树的左右子树都相同这两个树才是完全相同的两个树
- 迭代法
- 进行先序遍历
- 如果该节点不为空,添加值;如果节点为空添加null
- 最后判断遍历后的两个结果数组是不是一样
- 如果一样就是相同的两个树,如果不一样那就不是相同的两个树
3、代码
# Definition for a binary tree node.
# 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
if not p or not q:
return False
#递归
#return p.val==q.val and self.isSameTree(p.left,q.left) and self.isSameTree(p.right,q.right)
#迭代
res_p,res_q = [],[]
def helper(root,res):
queue = collections.deque()
queue.append(root)
while queue:
item = queue.popleft()
if item:
res.append(item.val)
queue.append(item.left)
queue.append(item.right)
else:
res.append('null')
helper(p,res_p)
helper(q,res_q)
return res_p==res_q
总结 判断两个树是否相同的模板。