一、题目
题目链接:https://leetcode-cn.com/problems/same-tree/
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 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.递归求解:
递归是一种比较简单的实现方法,对于传入的每个节点,我们判断是否都为空,若都为空,则返回True,否则只要有一个为空,返回False,否则说明都不为空,此时可以判断两个节点的值是否相等,若不相等,直接返回False,若相等,则调用自己,将左节点和右节点分别传入判断。代码如下:
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def isSameTree(self, p: TreeNode, q: TreeNode) -> bool: if p and q: if p.val==q.val: return self.isSameTree(p.left, q.left) and self.isSameTree(p.right,q.right) else: return False else: if q==None and p==None: return True else: return False
2.分别层次遍历两棵树,将遍历结果存放到列表中,最后比较这两个列表是否相等即可。代码如下:
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def isSameTree(self, p: TreeNode, q: TreeNode) -> bool: def cengci(root): if root==None: return [] presub = [root] res = [] p = root sub = [] while p!=None or len(presub)!=0: while len(presub)!=0: p = presub.pop(0) if p!=None: res.append(p.val) sub.append(p.left) sub.append(p.right) else: res.append(None) presub = sub sub = [] return res p = cengci(p) q = cengci(q) print(p) print(q) return p==q