Принимая ваш вопрос по номиналу, вы хотите распечатать узлы в порядке «ширины», а не использовать один из стандартных порядков глубины: «в порядке» или «предварительный заказ», или «пост-порядок».
- в заказ: CBDAEF
- предзаказа: ABCDEF
пост-заказ: CDBFEA
просил заказ: ABECDF
В вашей структуре дерева, каждый элемент может быть либо атомом, либо списком с одним элементом, либо списком с двумя элементами. Первый элемент списка всегда является атомом.
То, что я думаю, что псевдо-код должен выглядеть примерно:
Given a list 'remains-of-tree':
Create empty 'next-level' list
Foreach item in `remains-of-tree`
Print the CAR of `remains-of-tree`
If the CDR of `remains-of-tree` is not empty
CONS the first item onto 'next-level'
If there is a second item, CONS that onto `next-level`
Recurse, passing `next-level` as argument.
Я 100% уверен, что могут быть очищены (что выглядит тривиальной хвостовую рекурсию, все еще друг от друга). Однако, я думаю, это работает.
Start: (A (B (C D)) (E (F)))
Level 1:
Print CAR: A
Add (B (C D)) to next-level: ((B (C D)))
Add (E (F)) to next-level: ((B (C D)) (E (F)))
Pass ((B (C D) (E (F))) to level 2:
Level 2:
Item 1 is (B (C D))
Print CAR: B
Push C to next-level: (C)
Push D to next-level: (C D)
Item 2 is (E (F))
Print CAR: E
Push F to next-level: (C D F)
Pass (C D F) to level 3:
Level 3:
Item 1 is C
Print CAR: C
Item 2 is D
Print CAR: D
Item 3 is F
Print CAR: F
Это выглядит как домашнее задание. Если да, вы должны это заявить. –
Это выглядит как домашнее задание, но я брошу намек: это называется обходным путем. – geocar