Python bfs遍历二叉树的性能

Python bfs遍历二叉树的性能,python,algorithm,Python,Algorithm,我正在练习解决这个问题 给定二叉树,返回其节点值的级别顺序遍历。(即,从左到右,逐级) 例如: 给定二叉树[3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 将其级别顺序遍历返回为: [ [3], [9,20], [15,7] ] BFS解决方案 类树节点(对象): 定义初始化(self,x): self.val=x self.left=无 self.right=无 类解决方案: def levelOrder(self,root:TreeNode)

我正在练习解决这个问题

给定二叉树,返回其节点值的级别顺序遍历。(即,从左到右,逐级)

例如: 给定二叉树
[3,9,20,null,null,15,7]

3
/ \
9  20
/  \
15   7
将其级别顺序遍历返回为:

[
[3],
[9,20],
[15,7]
]
BFS解决方案

类树节点(对象):
定义初始化(self,x):
self.val=x
self.left=无
self.right=无
类解决方案:
def levelOrder(self,root:TreeNode)->List[List[int]]:
从集合导入deque
如果root==无:返回[]
队列=deque([root])
res=[]
步骤=-1
排队时:
步骤+=1
大小=长度(队列)
如果len(res)<步骤+1:
res.append([])
对于范围内的(尺寸):
cur=queue.popleft()
res[step].append(cur.val)
#伸展
如果当前左侧:
queue.append(当前左侧)
如果当前正确:
queue.append(当前右侧)
返回res
表演

运行时间:44毫秒,比Python3在线提交的二叉树级顺序遍历速度快75.27%

内存使用率:13.4 MB,不到用于二叉树级顺序遍历的Python3在线提交的5.64%

请注意繁琐的检查:

如果len(res)
移除条件检查后,如所示

类解决方案:
def levelOrder(self,root:TreeNode)->List[List[int]]:
从集合导入deque
如果root==无:返回[]
队列=deque([root])
res=[]
步骤=-1
排队时:
步骤+=1
大小=长度(队列)
#如果len(res)<步骤+1:#取消条件检查
res.append([])
对于范围内的(尺寸):
cur=queue.popleft()
res[step].append(cur.val)
#伸展
如果当前左侧:
queue.append(当前左侧)
如果当前正确:
queue.append(当前右侧)
返回res
演出改为

运行时间:56ms,比Python3在线提交二叉树级顺序遍历的19.04%快

内存使用率:13.5 MB,不到用于二叉树级顺序遍历的Python3在线提交的4.52%


从逻辑上讲,它们的性能是相同的,为什么要报告如此大的差异呢?

运行时是以毫秒为单位的,所以对我来说差异似乎很小。内存使用情况也是如此。他们是否运行多个基准并计算平均值?实例大小是多少?您是否尝试过多次运行同一代码,以查看是否也会出现您所称的如此大的差异?运行时以毫秒为单位,因此对我来说,差异似乎很小。内存使用情况也是如此。他们是否运行多个基准并计算平均值?实例大小是多少?您是否尝试过多次运行同一代码,以查看是否也会出现您所谓的重大差异?