我正试图编写代码来找出二叉树的深度.

我知道必须是rekursiv,提前非常感谢您的回答.

这是我在Kotlin的代码.

    sealed class Tree <A>{

    abstract fun isEmpty() : Boolean
    abstract fun size() : Int
    abstract fun depth() : Int

}

private data class Node <A >(
    val value : A,
    val left : Tree <A>,
    val right : Tree <A>
) : Tree <A >() {
    override fun isEmpty(): Boolean = false

    override fun size(): Int = 1 + left.size() + right.size()

    override fun depth(): Int {

         if (!left.isEmpty()) // I tried to work with isEmpty()

    }
}

private object Empty : Tree < Nothing >() {
    override fun isEmpty(): Boolean = true
    override fun size(): Int = 0
    override fun depth(): Int = 0
}

fun <A> emptyTree () : Tree <A> = Empty as Tree <A>
fun <A> treeNode (
    value : A,
    left : Tree <A> = emptyTree () ,
    right : Tree <A> = emptyTree ()
): Tree <A> = Node (value , left , right )


fun main(){

    var tree : Tree<Int> = emptyTree()

    tree = treeNode(5,treeNode(3,treeNode(2,treeNode(1)),treeNode(4)),treeNode(8,emptyTree(),treeNode(10)));

我用一棵有7个 node 的树测试了我的代码

    println(tree.size())
    println(tree.depth())
}

推荐答案

try 使用与大小相同的方法: node 的深度为1加上左侧最大值.深度()和右侧.深度().

Kotlin相关问答推荐

如果一项工作失败,请继续在Kotlin 等待其他工作/子元素完成

在KMP中使用koin将来自Android的上下文注入到SQLDelight Driver中

Kotlin—列出具有不同T的列表之间的操作'

判断字符串是否除了.&" ",","@""""

kotlin - 挂起简单方法调用链时可能存在冗余分支

Kotlin 基于参数类型的返回类型推断

Gradle:无法创建 ExtensiblePolymorphicDomainObjectContainer

如何将 `when` 与 2 个密封类一起使用并获取内部值?

如何访问嵌套在另一个 map 中的 map 中的值(在 kotlin 中)

Kotlin 如何使用其 get 函数在内部检索映射值

为什么记得不将 StateFlow 转换为特定类型?

Kotlin 无法找到或加载主类

如何使用 Coil 从 URL 获取位图?

Kotlin boxed Int 不一样

在 Kotlin 中取最后 n 个元素

runOnUiThread 没有调用

ActivityOptions.makeSceneTransitionAnimation 在具有多个视图的 kotlin 中不起作用

Kotlin 具体化的泛型不会按计划保持类型

有没有办法在数据类构建时转换属性的值?

Kotlin中的测试无法访问受保护(protected)的方法