Python实现DFS和BFS,遍历目录树并测试两者速度
代码:
import os,time def BFS(start): li=[start]#定义一个队列,先进先出,所以外层先进先出 while len(li)>0:#如果队列不等于0就一直循环 A=li.pop(0)#取出队列的第一个,并移除第一个 if os.path.isfile(A): print(f"[文件]{A}") else: pathlist=os.listdir(A)# 获取子目录 for i in pathlist:#进入队列的第一个文件夹,获取子节点 path=A+"\\"+i#生成子目录路径 li.append(A+"\\"+i) #把路径加入队列 print(f"{A}") def DFS(start): pathlist=os.listdir(start) for item in pathlist: path=start+"\\"+item if os.path.isfile(path): print(f"[文件]{path}") else: print(f"{path}") DFS(path) # path="F:\\tree" path="F:\\AccessibilityServiceDemo" t=time.time() BFS(path) l1=time.time()-t t1=time.time() DFS(path) l2=time.time()-t1 print(l1) print(l2)
另一种DFS写法:
将队列改为栈,先进后出
def DFS(start): li=[start] while len(li)>0: A=li.pop()#这里取抽出列表的最后一个。队列变成栈,先进先出 if os.path.isfile(A): print(f"[文件]{A}") else: pathlist=os.listdir(A)# 获取子目录 for i in pathlist:#进入队列的第一个文件夹,获取子节点 path=A+"\\"+i#生成子目录路径 li.append(A+"\\"+i) #把路径加入队列 print(f"{A}")