我一直在完成本书中的练习。写得很好,但动作很快。到目前为止,我一直在跟上。
但是,对二叉树的经验为零,我坚持这个。这是作业:
编写一个函数 size 来计算树中节点(叶子和树枝)的数量。
这是作为密封类的树结构:
sealed class Tree<out A>
data class Leaf<A>(var value: A) : Tree<A>()
data class Branch<A>(val left: Tree<A>,val right: Tree<A>) : Tree<A>()
我不得不搜索有关二叉树的信息,并在 Kotlin 中找到了一个我能理解的示例。
但该样本具有三态结构,而练习具有双态:
class BinaryNode<Element>(
val value: Element,var leftChild: BinaryNode<Element>? = null,var rightChild: BinaryNode<Element>? = null
) {
因此,我无法使用密封类构建有效的二叉树,我可以在其上测试练习解决方案,即:
fun <A> size(tree: Tree<A>): Int =
when (tree) {
is Leaf -> 1
is Branch -> 1 + size(tree.left) + size(tree.right)
}
解决方案看起来似乎很合理,但无法完全弄清楚树的构造。
任何帮助将不胜感激。