단어 목록을 저장하는 BST를 구현하려고합니다. 순회하고 순서대로 인쇄하려고하면 목록이 알파벳 순으로 인쇄되기 때문에 트리 구조가 정확하다는 것을 알고 있습니다. 그러나 트리에서 요소를 찾는 내 검색 함수는 매번 false를 반환합니다.스위프트 이진 검색 트리 검색
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
}
}
}
내 이진 검색 트리 구현을 찾아주세요을 " String으로! "도처에? 귀하의 BST는 일반 – Alexander
또한 'parent'에 대한 귀하의 강력한 참조는 유지주기를 초래하고 결과적으로 메모리 누수가 발생합니다. – Alexander
나는 그것없이 비교를하는 방법을 확신하지 못합니다. 그대로! 문자열 "2 진수 연산자 <유형 'T'및 '문자열'에 적용 할 수 없습니다. – user7799235