示例 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
思路一:递归实现
- pq都为空,返回True
- pq中只有一个为空,返回False
- pq的值不相同返回False
- 判断pq左右孩子是否相同
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def isSameTree(self, p, q):
if not p and not q:
return True
if not p or not q:
return False
if p.val != q.val:
return False
return self.isSameTree(p.left,q.left) and self.isSameTree(p.right, q.right)
a = TreeNode(1)
b = TreeNode(2)
c = TreeNode(3)
a.left = b
a.right = c
a2 = TreeNode(1)
b2 = TreeNode(2)
c2 = TreeNode(3)
a2.left = b2
a2.right = c2
print(Solution().isSameTree(a,a2))
方法二:广度优先遍历
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
from collections import deque
class Solution2:
def isSameTree2(self, p, q):
def check(p, q):
if not p and not q:
return True
if not p or not q:
return False
if p.val != q.val:
return False
return True ##check如果值相同要return True
queue = deque([(p, q),])
while queue:
p, q = queue.popleft()
if not check(p, q):
return False
if p:
queue.append((p.left, q.left)) ##添加进queue
queue.append((p.right, q.right))
return True #结尾要return True
a = TreeNode(1)
b = TreeNode(2)
c = TreeNode(3)
a.left = b
a.right = c
a2 = TreeNode(1)
b2 = TreeNode(2)
c2 = TreeNode(3)
a2.left = b2
a2.right = c2
print(Solution2().isSameTree2(a, a2))