Рекурсивний обхід дерева

Реалізуй генераторну функцію walk_tree, яка рекурсивно проходить дерево у вигляді вкладених словників (dict) та повертає всі ключі у порядку глибини (depth-first traversal).

Використовуй конструкцію yield from для делегування ітерації вкладеним генераторам.

Сигнатура функції:

def walk_tree(data: dict) -> Iterator[str]:

Приклад:

>>> data = {
...     "a": {
...         "b": {
...             "c": 1
...         }
...     },
...     "d": 2
... }

>>> list(walk_tree(data))
['a', 'b', 'c', 'd']

>>> data = {
...     "x": {"y": {"z": {}}},
...     "m": {"n": 42}
... }

>>> list(walk_tree(data))
['x', 'y', 'z', 'm', 'n']

Підказки до реалізації

  • Перевіряй, чи значення є словником (dict), і якщо так — рекурсивно обходь його.
  • Для рекурсивного виклику використовуй yield from.
  • Не враховуй значення — лише ключі.