我想实现一个存储单词列表的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