Вы можете использовать очередь.
Как только вы получите запрошенное пользователем значение, поместите его в очередь. Затем, пока очередь не пуста, вставьте значение, напечатайте его, проверьте dict, и, если текущее значение является ключом в dict, добавьте каждое из
этих значений в очередь, чтобы проверить их. в следующем проходе.
import queue
tree={'0':('1','2','3'), '1':('4'), '2':('5','6'), '3':(), '4':('7','8'), '8':('9','10','11')}
num = input("what you want ")
q = queue.Queue()
q.put(num)
while not q.empty():
n = q.get()
for s in n:
print(s)
if s in tree:
q.put(tree[s])
Demo
Обратите внимание, что если у вас есть дерево tree={'0':('1'), '1':('0')}
или любая другая циклическая ссылка, этот код будет работать вечно. Будьте осторожны!