Skip to content

Instantly share code, notes, and snippets.

@JadenGeller
Last active July 3, 2024 02:51
Show Gist options
  • Save JadenGeller/a39a6bb32167f616dd494edce6b3b6e6 to your computer and use it in GitHub Desktop.
Save JadenGeller/a39a6bb32167f616dd494edce6b3b6e6 to your computer and use it in GitHub Desktop.
itertools bfs
from itertools import zip_longest, chain
from dataclasses import dataclass, field
@dataclass
class Tree:
value: any
children: list = field(default_factory=list)
def levels(self):
yield [self]
for level in zip_longest(*(c.levels() for c in self.children), fillvalue=()):
yield chain.from_iterable(level)
def bfs(self):
return chain.from_iterable(self.levels())
@JadenGeller
Copy link
Author

tree = Tree(1, [
    Tree(2),
    Tree(3, [
        Tree(4),
        Tree(5, [
            Tree("hi"),
            Tree("bye")
        ])
    ]),
    Tree(6, [
        Tree("LOL")
    ])
])

for subtree in tree.bfs():
    print(subtree.value)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment