Вот вопрос, который я недавно спросил в интервью. Бинарное дерево задано с условием, что каждый левый ребенок на 1 меньше, чем корень, а правый - на 1 больше. Вот пример дерева
Сортировка в O (1) и O (n) сложности времени.
Вот подходы, которые я предложил:
- Использовать счетчик, чтобы поддерживать подсчет каждого элемента, а затем возвращаться после завершения всего обхода O (n) времени и сложности O (n).
- Использовать кодировку длины прогона. Формируйте цепочку, когда элемент повторяется с номером в качестве ключа и считается значением. Требуется место для подсчета, только когда no не повторяется и поэтому не требует дополнительного пространства, кроме массива, но сложность времени будет O (n log n), так как мы должны пересечь массив, чтобы увидеть, есть ли он.
- Наконец, я предложил пройти первый путь. Нам нужно пространство O (log n) для очереди и O (n) временную сложность (Предположим, что вставка является O (1) связанным списком).
Каковы ваши подходы?