我正在实现一个BST并且正在处理remove()函数,问题是当我尝试删除节点以删除即当前时,它在我打印树结构时仍然存在。
class Node<T : Comparable> {
var value: T
var left: Node<T>?
var right: Node<T>?
init(_ value:T) {
self.value = value
}
}
func remove(_ value:T) {
var current: Node<T>? = root
while let root = current {
if value == root.value {
if let _ = root.left, let right = root.right {
let minValue = getMinValue(right)
root.value = minValue
remove(minValue)
} else if let left = root.left {
root.value = left.value
root.left = nil
} else if let right = root.right {
root.value = right.value
root.left = nil
} else {
//This doesn't remove the reference completely
current = nil
}
} else if value > root.value {
current = root.right
} else {
current = root.left
}
}
}
我的打印功能仍打印出我在上一个功能中删除的节点
private func printTree(_ node:Node<T>?){
guard let root = node else {
return
}
print(root.value)
printTree(root.right)
printTree(root.left)
}
答案 0 :(得分:2)
不幸的是,您只需将局部变量current
设置为nil
即可。 current
的父节点仍然具有您要删除的节点的引用。