[复习]使用 kotlin 重写二分搜索树(一)

2021-03-25  本文已影响0人  吴敬悦

前两天使用 js 编写的时候,我发现很陌生,于是我使用 kotlin 重新实现一次,由于时间的原因暂时先实现添加的操作:


class SearchTree<E: Comparable<E>> {
    data class Node<T: Comparable<T>>(val e: T, var left: Node<T>?, var right: Node<T>?)
    private var root: Node<E>? = null
    private var size = 0
    fun size(): Number = size
    fun isEmpty():Boolean = root == null
    fun add(e: E) {
        root = add(root, e)
        size++
    }
    private fun add(node: Node<E>?, e: E): Node<E> {
        if (node == null) {
            return Node(e, null, null)
        }
        if (node.e < e) {
            node.right = add(node.right, e)
        } else if (node.e > e) {
            node.left = add(node.left, e)
        }
        return node
    }

    fun removeMax(): Boolean {
        if (size == 0 || root == null) {
            return false
        }
        removeMax(root!!)
        return true
    }
    private fun removeMax(node: Node<E>): Node<E>? {
        if(node.right == null) {
            return node.left
        }
        return removeMax(node.right!!)
    }


    private fun print(node: Node<E>?, str: String) {
        if (node == null) {
            return
        }
        print(node.right, str)
        str.plus("${node.e},")
        print(node.left, str)
    }

    override fun toString(): String {
        val str = ""
        print(root, str)
        return str
    }
}

其中打印的字符串操作还存在问题,由于我的 kotlin 还不熟练,所以这还没解决,改天会完善,同时学习数据结构和 kotlin 。实现算法思路跟使用 js 的相同,这次我是跟着教学视频来进行的。

上一篇下一篇

猜你喜欢

热点阅读