Scala中的树集合

Ric*_*ver 9 scala scala-collections

我想在Scala中实现一个树.我的特定树使用Swing Split窗格来提供地理地图的多个视图.拆分窗格中的任何窗格本身都可以进一步划分以提供额外的视图.我是否正确地说TreeMap和TreeSet都没有提供Tree功能?如果我误解了这个,请原谅.它让我觉得应该有标准的树集合,并且继续重新发明轮子是不好的做法.是否有任何Tree实现可能是未来的Scala标准?

所有树有三种类型的元素:根,节点和叶子.叶子和节点必须只有父对象的引用.根节点和节点可以有多个子节点和叶子的引用.叶子零孩子.如果不删除子项,则无法删除节点和根.我可能错过了其他规则/约束.

这似乎足以证明标准集合的通用规范.我还建议,对于Root和Nodes只能有2个子节点或单个子节点的情况,应该有一个标准的子类集合.在我的特定情况下,这就是我想要的.

Dan*_*ral 25

实际上,一棵树本身就很无用而且很难指定.

从后者开始,严格讲述数据结构,树有多少个孩子?节点是否存储值?节点存储元数据吗?孩子们有指向父母的指针吗?您是将树存储为具有指针的节点还是作为阵列上的位置元素?

这些都是答案"取决于"的问题.事实上,你说孩子们有指向他们父母的指针,但对于任何不可变树都不这样!您还似乎假设树总是存储为带引用的节点对象,而某些树实际上作为节点存储在单个数组(例如)上.

此外,并非所有这些要求都可以适应 - 有些是相互排斥的.即使你忽略了这些,你仍然会留下一个数据结构,它没有针对任何事情进行优化而且使用起来很笨,因为你必须处理许多与你无关的细节.

然后,还有第二个问题,就是树本身就没用了.TreeSetTreeMap利用特定的树,其插入/删除/查找算法使它们成为排序数据的良好数据结构.然而,这根本不是树木的唯一用途.树可用于搜索空间算法,表示树状真实世界信息,组成文件系统等.有时,任务是在图中查找树.这些用途中的每一个都需要不同的表示和不同的算法 - 算法使它们完全有用.

而且,最重要的是,编写一个树类是微不足道的.问题是编写算法来操纵它.


0__*_*0__ 5

"树"作为GUI小部件(您似乎指的是)和树作为有序数据结构的概念之间存在一些不匹配.在前一种情况下,它只是一个嵌套序列,在后一种情况下,目的是提供快速搜索算法,并且您不会随意操纵内部结构,其中分支因子通常是常量并且树高保持平衡后者的一个例子是collection.immutable.TreeMap使用称为Red-Black-Tree的自平衡二叉树结构.

所以这些数据结构对于桥接而言毫无用处javax.swing.TreeModel.关于这个接口几乎没有什么可以做的,所以你可能会坚持使用默认的实现DefaultTreeModel,一个可变的非泛型结构(这就是单线程Swing所需要的).

有关使用scala-swing JTree包装器的讨论,请参阅此问题.它还有一个指向Scala库的链接JTree.