#python #algorithm #binary-search-tree
#python #алгоритм #двоичное дерево поиска
Вопрос:
Я решаю алгоритм BST с заданным числом n, мне нужно вернуть наибольшее значение, которое меньше n. К сожалению, как только я нахожу ответ. Мой код не возвращает его, но продолжает цикл. Чего я не понимаю? Спасибо.
class Node:
# Constructor to create a new node
def __init__(self, key):
self.key = key
self.left = None
self.right = None
self.parent = None
# A binary search tree
class BinarySearchTree:
# Constructor to create a new BST
def __init__(self):
self.root = None
def find_largest_smaller_key(self, num):
largest = 0
while self.root:
if self.root.key < num and self.root.key > largest:
largest = self.root.key
if self.root.right:
if self.root.right.key < num and self.root.right.key > largest:
self.root = self.root.right
if self.root.left:
if self.root.left.key < num and self.root.left.key > largest:
largest = self.root.left.key
self.root = self.root.left
return largest
Комментарии:
1. Пожалуйста, используйте согласованную схему отступов; это облегчит чтение вашего кода по сравнению с использованием 4 пробелов для одних уровней и 2 для других.
Ответ №1:
Классный алгоритм.
Подумайте о том, что произойдет, когда больше не будет ни левого, ни правого:
Это может произойти один раз, но больше не вызывать then largest == self.root .поэтому ключа здесь нет
if self.root.key < num and self.root.key > largest:
largest = self.root.key
Этого не произойдет
if self.root.right:
Это также не приведет
if self.root.left:
но
self.root по-прежнему имеет значение true, поэтому
while self.root:
Будет продолжать работать g вечно
Комментарии:
1. вау, потрясающее спасибо. Я не могу поверить, что забыл добавить оператор else.