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}")

 

 结论:

两种写法均是深度优先DFS明显更快

posted @ 2020-10-24 14:30  sunny开始学坏  阅读(477)  评论(0编辑  收藏  举报