我想實現一個存儲單詞列表的BST。我知道我的樹結構是正確的,因爲當我嘗試遍歷並按順序打印時,列表按字母順序打印。但是,每次在我的樹中查找元素的搜索函數都會返回false。Swift二進制搜索樹搜索
func search(searchValue: String) -> Bool? {
if searchValue == value as! String{
return true
}
if searchValue < value as! String {
return left?.search(searchValue: searchValue)
}
if searchValue > value as! String{
return right?.search(searchValue: searchValue)
}
return false
}
該函數在此循環中調用。每個不在BST中的單詞都應附加到數組。目前沒有單詞被添加到數組中。輸入數組是一個包含所有要與BST進行檢查的單詞的數組。上下文
for item in arrayInput
{
let target = item.lowercased()//reversed
let inTree = tree.search(searchValue: target)
if inTree == false
{
misspelled.append(item)
}
}
更多BST類:
public class BinarySearchTree<T: Comparable> {
fileprivate(set) public var value: T
fileprivate(set) public var parent: BinarySearchTree?
fileprivate(set) public var left: BinarySearchTree?
fileprivate(set) public var right: BinarySearchTree?
public init(value: T) {
self.value = value
}
public convenience init(array: [T]) {
precondition(array.count > 0)
self.init(value: array.first!)
for v in array.dropFirst() {
insert(value: v)
}
}
}
public func insert(value: T) {
if value < self.value {
if let left = left {
left.insert(value: value)
} else {
left = BinarySearchTree(value: value)
left?.parent = self
}
} else {
if let right = right {
right.insert(value: value)
} else {
right = BinarySearchTree(value: value)
right?.parent = self
}
}
}
與什麼是「作爲字符串!「到處都是?你的BST是通用的 – Alexander
另外,你對'parent'的強烈引用將導致一個保留週期,並因此導致內存泄漏。 – Alexander
我不確定如何在沒有它的情況下進行比較。沒有!字符串我收到一條消息「二元運算符<不能應用於類型'T'和'字符串' – user7799235