[复习]使用 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
的相同,这次我是跟着教学视频来进行的。