题目
解题
知识点: 树 \color{red}{树} 树
第一种方法 递归
树 先 序 遍 历 \color{red}{先序遍历} 先序遍历访问节点过程:先访问中间结点(p.val),再访问此结点的左结点(p.left),最后访问此节点的右结点(p.right)。
code:
# 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 == None and q== None: # 判断p,q是不是都为空
return True
if q == None or p == None: # 这里判断p,q是否任意一个为空,这里需要注意的是先判断q是否为空再判断p,否则p=[1,2],q=[1,null,2] 会出错
return False
if p.val != q.val:
return False
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
本人当时找p == None or q == None错误找了很久…
因为力扣提示的错误行是if p.val != q.val:
结果:
力扣的执行时间…都是同一个代码,差了好几秒…
第二种方法 迭代
用的是deque()
from collections import deque
p = [1,2,3]
q = [1,2,4]
de = deque([(p,q),])
print(de)
# deque([([1, 2, 3], [1, 2, 4])])
这种方法在这里使用非常麻烦,但是为了了解还是弄懂比较好
code:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
from collections import deque
class Solution:
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
def check(p,q):
if p == None and q== None:
return True
if q == None or p == None:
return False
if p.val != q.val:
return False
return True
d = deque([(p,q),])
while d:
p, q = d.popleft()
if not check(p, q):
return False
if p:
d.append((p.left,q.left))
d.append((p.right,q.right))
return True
结果:
作者:LeetCode
链接:https://leetcode-cn.com/problems/same-tree/solution/xiang-tong-de-shu-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
3.14
over