> Как написать структуру или класс для бинарного дерева поиска (iOS, Swift)

Уровень: senior · Роль: mobile · Категория: Технические вопросы

Компании: Яндекс

Стек: iOS, Swift

> Пример ответа

Для реализации бинарного дерева поиска (BST) в Swift можно использовать класс с опциональными ссылками на левый и правый дочерние узлы. Вот пример:

SWIFT
class BinarySearchTree<T: Comparable> {
var value: T
var left: BinarySearchTree?
var right: BinarySearchTree?
init(value: T) {
self.value = value
}
func insert(_ newValue: T) {
if newValue < value {
if let leftNode = left {
leftNode.insert(newValue)
} else {
left = BinarySearchTree(value: newValue)
}
} else if newValue > value {
if let rightNode = right {
rightNode.insert(newValue)
} else {
right = BinarySearchTree(value: newValue)
}
}
// Значения, равные текущему, игнорируются (можно настроить)
}
func contains(_ target: T) -> Bool {
if target == value {
return true
} else if target < value {
return left?.contains(target) ?? false
} else {
return right?.contains(target) ?? false
}
}
}

Этот класс использует дженерики для поддержки любого типа, соответствующего протоколу Comparable. Метод insert рекурсивно добавляет элемент, соблюдая правило BST: меньшие значения - слева, большие - справа. Метод contains проверяет наличие элемента. Для iOS-разработки такая структура удобна, так как Swift обеспечивает безопасность типов и ARC для управления памятью.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью