Kotlin 中的函数式编程,曼宁书 - 二叉树结构

我一直在完成本书中的练习。写得很好,但动作很快。到目前为止,我一直在跟上。

但是,对二叉树的经验为零,我坚持这个。这是作业:

编写一个函数 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)
    }

解决方案看起来似乎很合理,但无法完全弄清楚树的构造。

任何帮助将不胜感激。

wawd1314 回答:Kotlin 中的函数式编程,曼宁书 - 二叉树结构

这是一个简单的例子:

fun main() {
    val tree = Branch(
        Branch(
            Leaf(1),Leaf(2)
        ),Branch(
            Leaf(3),Branch(
                Leaf(4),Leaf(5)
            )
        )
    )
    println(size(tree))
}

这会打印 9,即 5 片叶子加上树枝。

本文链接:https://www.f2er.com/242.html

大家都在问