Пояснение о деревьях потокового двоичного поиска (пропустите, если вы их знаете):
Мы знаем, что в двоичном дереве поиска с n узлами есть n + 1 левый и правый указатели, содержащие ноль. Чтобы использовать эту память, которая содержит нуль, мы меняем двоичное дерево следующим образом:
для каждого узла z в дереве:
если left [z] = NULL, мы помещаем в left [z] значение дерева-предшественника (z) (то есть указатель на узел, который содержит ключ предшественника),
если right [z] = NULL, мы помещаем в right [z] значение tree-successor (z) (опять же, это указатель на узел, который содержит ключ преемника).
Такое дерево называется многопоточным двоичным деревом поиска, а новые ссылки - потоками.
И мой вопрос: В чем основное преимущество потоковых двоичных деревьев поиска (по сравнению с "обычными" двоичными деревьями поиска). Быстрый поиск в сети показал мне, что это помогает реализовать обход по порядку итеративно, а не рекурсивно.
Это единственная разница? Есть ли другой способ использовать потоки?
Неужели это столь значимое преимущество? и если да, то почему? Рекурсивный обход тоже стоит O (n) времени, так что ..
Большое Вам спасибо.
O(n)
временная сложность, сO(logN)
требованиями к пространству (средний случай) иO(N)
требованиями к пространству в худшем случае. С другой стороны, многопоточное двоичное дерево требуетO(1)
пространства в худшем случае, если обход выполняется итеративно. - person amnn   schedule 05.01.2014