Scheme 我是否误解了SICP练习2.65的含义?

Scheme 我是否误解了SICP练习2.65的含义?,scheme,sicp,Scheme,Sicp,以下是SICP的练习2.65: 使用练习2.63和2.64的结果,给出作为(平衡)二叉树实现的集合的并集和交集的Θ(n)实现 在“集合为有序列表”一章和练习2.62中,我们已经有了有序列表的并集和交集。我在互联网上搜索过,2.65的答案太简单了,无法接受,他们只是将二叉树转换为列表,仍然使用并集和交集来处理有序列表 在我看来,我们需要将集合转换成二叉树,并重写二叉树的并集和交集 那么,我是否误解了SICP练习2.65的含义?还是有一个好的答案?在这种情况下,“简单”的答案是正确的:首先将树转换为

以下是SICP的练习2.65:

使用练习2.63和2.64的结果,给出作为(平衡)二叉树实现的集合的并集和交集的Θ(n)实现

在“集合为有序列表”一章和练习2.62中,我们已经有了有序列表的并集和交集。我在互联网上搜索过,2.65的答案太简单了,无法接受,他们只是将二叉树转换为列表,仍然使用并集和交集来处理有序列表

在我看来,我们需要将集合转换成二叉树,并重写二叉树的并集和交集

那么,我是否误解了SICP练习2.65的含义?还是有一个好的答案?

在这种情况下,“简单”的答案是正确的:首先将树转换为列表(事实上,是有序列表,因为我们正在按顺序遍历树),然后使用有序集过程,最后将结果集转换回树。为什么这是正确的?因为所描述的过程通过使用已有的过程达到了所需的
O(n)
复杂性-无需重新发明轮子


虽然可以通过操纵树来编写“直接”答案,但这太麻烦了,而且在
O(n)
中实现而不使用变异操作是非常棘手的(如果不是不可能的话!)——到目前为止,在本书中,我们还没有使用
set
设置汽车
设置cdr

你说得对,你可以使用本文前面的例子作为指导,为平衡二叉树编写有效的
并集
交集
。但是,本文明确地告诉您使用前面两个练习的结果,因此它将指导您使用特定的解决方案。该解决方案(将二叉树转换为一个列表,以将问题简化为已解决的问题)已经是O(n),这是解决该问题的最佳顺序。

Ya这也是我得到的,主要是因为生成的树的约束必须平衡。如果您使用的是一个自平衡树,比如红黑树,可能没什么大不了的,但是构建一个平衡树最简单的方法是从一个有序的列表开始。