Если BST упорядочен и сбалансирован, то есть не самый левый лист является самым низким значением. Тогда n-е наименьшее значение будет n-м значением, которое вы перебираете в обходе дерева заказов.
Таким образом, нахождение наименьшего значения kth в сбалансированном дереве находится между O (log n) и O (2n). O (N) это тогда.
Моя реализация создаст помощника, который принимает продолжение, а также k
и дерево. Продолжением по умолчанию может быть (lambda (v) #f)
, и поэтому, если вам нужно 30-е наименьшее в дереве из 10 узлов, оно вызовет это, и вы получите #f
обратно. В тот момент, когда вы найдете самый глубокий узел, и он k
равен нулю, вместо вызова продолжения, которое он оценивает по значению текущего узла.
Если бы вы удалили наименьшее значение k раз, у вас было бы O (k * log n) ~ O (n log n)> O (n)
Удачи