可以在不使用指针或引用的情况下遍历列表。 在某些情况下,这消除了实际拥有该列表的需要。 考虑下面的代码,如何在不使用指针或引用的情况下迭代二叉树?
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