leetcode-100

100. 相同的树

给你两棵二叉树的根节点 pq ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例:

image-20210525154142949

1
2
输入:p = [1,2], q = [1,null,2]
输出:false

题解

两个二叉树相同,当且仅当两个二叉树的结构完全相同,且所有对应节点的值相同。因此,可以通过搜索的方式判断两个二叉树是否相同。

官方题解-DFS

如果两个二叉树都为空,则两个二叉树相同。如果两个二叉树中有且只有一个为空,则两个二叉树一定不相同。

如果两个二叉树都不为空,那么首先判断它们的根节点的值是否相同,若不相同则两个二叉树一定不同,若相同,再分别判断两个二叉树的左子树是否相同以及右子树是否相同。

这是一个递归的过程,因此可以使用深度优先搜索,递归地判断两个二叉树是否相同。

1
2
3
4
5
6
7
8
9
10
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)

BFS

也可以通过广度优先搜索判断两个二叉树是否相同。同样首先判断两个二叉树是否为空,如果两个二叉树都不为空,则从两个二叉树的根节点开始广度优先搜索。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def isSameTree2(self, p: TreeNode, q: TreeNode):
queue_p = list()
qeuue_q = list()

if not p and not q:
return True
elif not p or not q:
return False
queue_p.append(p)
qeuue_q.append(q)
print(p.val)
print(q.val)
while len(queue_p) and len(qeuue_q):
t_p = queue_p.pop()
t_q = qeuue_q.pop()

if not t_p and not t_q:
continue
elif not t_p or not t_q:
print("--")
# print(t_p.val)
print(t_q.val)
return False
print(t_p.val,t_q.val)
if t_p.val != t_q.val:
print("==")
return False

queue_p.append(t_p.left)
queue_p.append(t_p.right)

qeuue_q.append(t_q.left)
qeuue_q.append(t_q.right)
return True
作者

bd160jbgm

发布于

2021-05-25

更新于

2021-05-25

许可协议