upd bfs, dfs on rooted tree

add readme
This commit is contained in:
onyx-and-iris 2024-01-12 12:19:51 +00:00
parent 77b0993d73
commit 33a56b2e20
3 changed files with 44 additions and 10 deletions

5
chapter7/README.md Normal file
View File

@ -0,0 +1,5 @@
# DFS BFS on rooted tree
The BFS example uses a queue which results in a breadth first search. When a directory is found its contents are appended to the queue to be processed later
The DFS example uses the call stack which results in a depth first search. When a directory is found it is recursively passed to files_with_extension to be processed immediately.

View File

@ -5,23 +5,27 @@ from pathlib import Path
logging.basicConfig(level=logging.DEBUG) logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
EXT = ".rb"
scripts_path = Path.home() / "scripts" scripts_path = Path.home() / "scripts"
def files_with_extension(ext): def files_with_extension(start_directory):
queue = deque() queue = deque()
queue += scripts_path.glob("*") queue.append(start_directory)
while queue: while queue:
item = queue.popleft() items = queue.popleft()
# if it is a file and has extension ext then print for item in items.glob("*"):
if item.is_file() and item.suffix == ext: # if it is a file and has extension EXT then print
if item.is_file():
if item.suffix == EXT:
print(item) print(item)
# otherwise add directory items to the queue # otherwise append directory to the queue
else: else:
queue += item.glob("*") queue.append(item)
files_with_extension(".sh") files_with_extension(scripts_path)

25
chapter7/dfs_dirtrav.py Normal file
View File

@ -0,0 +1,25 @@
import logging
from collections import deque
from pathlib import Path
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
EXT = ".rb"
scripts_path = Path.home() / "scripts"
def files_with_extension(directory):
for item in directory.glob("*"):
# if it is a file and has extension EXT then print
if item.is_file():
if item.suffix == EXT:
print(item)
# otherwise pass directory to recursive call
else:
files_with_extension(item)
files_with_extension(scripts_path)