Рассмотрим следующий класс:Как сделать IEnumerable значений узлов дерева?
class TreeNode
{
int value;
public TreeNode l, r;
public TreeNode(int value)
{
this.value = value;
}
public IEnumerable<int> sub_values()
{
if (l != null)
foreach (int i in l.sub_values())
yield return i;
if (r != null)
foreach (int i in r.sub_values())
yield return i;
yield return value;
}
}
Каждое значение передается O(h)
раз, когда h
высота дерева. Сначала в инструкции yield return value;
, а затем в yield return i;
каждого родительского узла.
Таким образом, sub_values
возвращает n
значениями с использованием O(nh)
временной сложности.
Я могу заменить его на метод, который принимает ссылку на список целых чисел и вместо возвращаемых значений добавляет их в этот список, но он больше не будет лениться.
Могу ли я вернуть n
значения в O(n)
и поддерживать лень?