我在Kotlin写了红黑树.有趣的insertFixup在插入新元素后恢复平衡(z:Node?是新元素).树平衡算法从这里开始(第2-3页).该问题是,科特林不允许我重新分配 ž到z.parent和z.parent.parent.我希望z成为一个指针.问题是如何让Kotlin明白我对他的要求?
class Node(key: Int) {...}
class BinarySearchTree {
var root: Node? = null
fun insert(newNode: Node) {...}
fun RotateLeft(x: Node?) {...}
fun RotateRight(x: Node?) {...}
fun insertFixup(z: Node?) {
var y: Node?
while (z?.parent?.color == "RED") {
if (z?.parent == z?.parent?.parent?.left) {
y = z?.parent?.parent?.right
if (y?.color == "RED") {
z?.parent?.color = "BLACK"
y?.color = "BLACK"
z?.parent?.parent?.color = "RED"
z = …Run Code Online (Sandbox Code Playgroud) 我正在写一棵B树,它的一个节点可能有很多键,我遇到了一个问题。当我创建一个Int数组时,一切正常:
class Node<K: Comparable<K>> (val t: Int) {
val keys: Array<Int?> = Array<Int?> (t*2-1, {null})
}
Run Code Online (Sandbox Code Playgroud)
但我想创建一个泛型K数组:
class Node<K: Comparable<K>> (val t: Int) {
val keys : Array<K?> = Array<K?> (t*2-1, {null})
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,编译器会抛出以下错误消息:
'Kotlin: Cannot use 'K' as reified type parameter. Use a class instead.'
Run Code Online (Sandbox Code Playgroud)
问题是如何创建泛型数组?
UPD:感谢所有回复!看来MutableList对于我的目标来说是一个很好的解决方案。
我学习Haskell,但却陷入了困境:
add 0 = id
add x = add(x-1) . (+1)
Run Code Online (Sandbox Code Playgroud)
此函数通过向第一个参数添加1并从第二个参数减去1来向另一个参数添加一个参数.
*Main> add 4 2
6
Run Code Online (Sandbox Code Playgroud)
但是,我真的不明白它是如何工作的!任何人都可以解释为什么我们在'add'之后写了2个数字(虽然只用一个参数'x'来描述),'.'是什么?并且第二行中的'(+1)'表示所有这些都有效吗?
谢谢!
UPD:再次感谢所有答案!现在我明白它是如何工作的:)