深度遍历、广度遍历图解:
深度:
广度:
1.栈模拟递归:
mystack=[]
mystack.append(5)
lastnum=0
while len(mystack)!=0:
data=mystack.pop()#弹出数据
print(data)
lastnum+=data
if data==0:
break
else:
mystack.append(data-1)
print(lastnum)
结果:
2.模拟递归实现文件遍历:深度
import os
path=r"D:\桌面\代码"
mystack=[]
mystack.append([path,0])
while len(mystack)!=0:
pathlist=mystack.pop()#取出文件夹
filelist=os.listdir(pathlist[0])#遍历文件
num=pathlist[1]#代表层次
headstr=""
for i in range(num):
headstr+=" "
for i in range(len(filelist)):
filename = filelist[len(filelist) - 1 - i]
filepath = os.path.join(pathlist[0], filename) # 链接,取得绝对路径
if os.path.isdir(filepath):
print(headstr,"文件夹",filename)
mystack.append([filepath,num+1])
else:
print(headstr,"文件",filename)
结果:
3. 队列广度遍历:
import os
from collections import deque
path=r"D:\桌面\芜湖"
queue=deque([])#队列
queue.append(path)
while len(queue)!=0:
path=queue.popleft()#取出值
filelist=os.listdir(path)#遍历路径
for filename in filelist:
filepath=os.path.join(path,filename)
if os.path.isdir(filepath):
print("文件夹",filename)
queue.append(filepath)
else:
print("文件",filename)
结果: