2017-09-03 19 views
1

我正在實現一個BST並且正在執行remove()函數,問題是當我嘗試清空節點以刪除即當前節點時,它在打印樹結構時仍然存在。Nilling out可選不能在BST實現中工作

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) 
} 

回答

2

刪除不幸的是,你只是current設置局部變量nil節點。 current的父節點仍然具有您要刪除的節點的引用。

+0

就是這樣,謝謝! –