將您的問題作爲面值,您希望以「寬度優先」順序打印出節點,而不是使用標準的,深度優先的順序之一:'順序'或'預購'或'後序'。
- 按順序: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
這看起來像功課。如果是這樣,你應該這樣說。 – 2008-12-21 13:13:09
這看起來像功課,但我會提示:這被稱爲寬度優先遍歷。 – geocar 2008-12-21 14:35:02