Рекурсия по дереву в Swift

#swift #recursion

#swift #рекурсия

Вопрос:

Я просматривал некоторые рекурсивные функции дерева, но я немного запутался в возврате || , при каком условии выполняется тестирование возврата?

 func search(node: Node?, searchValue: Int) -> Bool {
    
    if node == nil {
        return false
    }
    
    if node?.data == searchValue {
        return true
    } else {
        return search(node: node?.left , searchValue: searchValue) || search(node: node?.right, searchValue: searchValue)
    }

}
  

Комментарии:

1. docs.swift.org/swift-book/LanguageGuide/BasicOperators.html

2. Вам следует проверить ссылку, предоставленную pawello, и также узнать о других операторах.

Ответ №1:

Оператор return — это рекурсивный вызов search функции с левым поддеревом и правым поддеревом. Обратите внимание, что search возвращает Bool , указывающее, содержит ли дерево искомое значение.

Поскольку оператор or || замыкает, поиск в правом поддереве будет выполняться только в том случае, если search не удалось найти элемент в левом поддереве. Когда поиск по левому поддереву возвращает результат true , то search сразу возвращается true без поиска по правому поддереву. Если оба рекурсивных вызова search возвращают false , то поиск действительно завершился неудачей и false возвращается (то есть false || false есть false ).

Итак, этот оператор return выполняет следующее:

 if searchValue is in the left subtree {
    return true
} else if the searchValue is in the right subtree {
    return true
} else {
    return false
}
  

Ответ №2:

Это проверка, является ли узел left OR ( || ) right либо nil или data равен searchValue . Если какое-либо из этих условий удовлетворяет, оно возвращает true . Если оба являются, false это приводит к false .