Nilling out可选不在BST实现中工作

时间:2017-09-03 13:24:13

标签: swift swift3 binary-tree binary-search-tree optional

我正在实现一个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)
}

1 个答案:

答案 0 :(得分:2)

不幸的是,您只需将局部变量current设置为nil即可。 current的父节点仍然具有您要删除的节点的引用。