可以在不使用指針或引用的情況下遍歷列表。 在某些情況下,這消除了實際擁有該列表的需要。 考慮下面的代碼,如何在不使用指針或引用的情況下迭代二叉樹?
int i;
for (i = 0; i < 10; ++i)
printf("%i ", i % 2);
它直接輸出該列表0 1 0 1 0 1 0 1 0 1,而無需實際存儲在存儲器中的列表中。
怎麼能用二叉樹做類似的事情?
請在下面的代碼中顯示一個實現tree_iterator,new_root_tree_iterator和traverse_tree_iterator的方法,其中upper_boundary_of_tree類似於列表示例中的數字10,並且我不知道如何定義。
人們遇到了我所說的upper_boundary_of_tree的問題。樹的上邊界不會用數字10表示。我不知道如何表示樹的某個上邊界。這是問題的一部分。樹的上邊界類似於上面列表代碼中使用數字10的方式,因爲它在相同的函數中標記了停止迭代的位置,但這絕對不是一回事。
如果你需要,你也可以有一個free_tree_iterator函數。
tree_iterator i = new_root_tree_iterator();
while (traverse_tree_iterator(&i, upper_boundary_of_tree))
foobar(i);
這一直困擾着我一段時間。
你試過自己解決嗎?編寫一個使用指針或引用的樹型迭代器。 – Blender 2012-03-06 19:06:58
將數字打印到文本流中的功能正在顯示一個序列,它不會創建一個列表。抽象序列與列表不同。 – Kaz 2012-03-06 19:07:51
如果你想使用未存儲在內存中的列表,你需要懶列表。懶惰列表可能會生成無限數量的項目,並且可能會由使用該列表的某個函數進行處理,並且這些都會發生在常量內存中。 (因爲消費者在列表中前進,失去了對前端的引用,這是垃圾回收。)但這仍然涉及指針。 – Kaz 2012-03-06 19:10:35