【发布时间】:2018-08-26 04:27:55
【问题描述】:
Scala 中的新学习者。我有所有节点和 BTree 的这些基类
abstract sealed class Node[T](implicit val ord : Ordering[T])
abstract sealed class BTree[T](implicit ord : Ordering[T])
extends Node[T] {
def size : Int
def depth : Int
这是基本情况类
object BTree {
//empty node
final case class EmptyNode[T]()(implicit ord : Ordering[T])
extends BTree[T] {
val size : Int = 0
val depth : Int = 0
}
//node with 1 child
final case class OneNode[T](t : BTree[T])(implicit ord : Ordering[T])
extends Node[T] {
val size : Int = t.size
val depth : Int = t.depth + 1
}
//node with 2 children
final case class TwoNode[T](t1 : BTree[T], u1 : T, t2 : BTree[T])
(implicit ord : Ordering[T]) extends BTree[T] {
val size : Int = t1.size + t2.size + 1
val depth : Int = max(t1.depth, t2.depth) + 1
}
他们继续ThreeNode和FourNode的模式
现在在BTree 类中,我必须实现一个In Order 函数,该函数返回已排序条目的列表。
// Return List of values sorted alphabetically/smallest to largest
def inOrder() : List[T] =
任何人都可以帮助如何实现这一点吗?我在 inOrder 函数内部思考,我有另一个递归调用的函数。但我不知道如何处理列表。我是否在每次递归调用之前附加它?
任何帮助表示赞赏
【问题讨论】:
-
您还没有修复上一个问题中的
OneNode。它需要继承自BTree而不是Node,并且需要有一个值成员u1才能与TwoNode保持一致。 -
我看不出
OneNode元素如何存在于正确的B-tree 中。单个子节点不能同时表示小于和大于节点键(数据)值,如果没有键,则它应该是EmptyNode,不需要子节点。 -
@Tim 它的任务,它是我们得到的骨架。我不认为我们可以改变它
-
@jwvh 是的,它不存在于正确的 BTree 中。但是在进行删除等操作时会用到它