Сортировка бинарного дерева поиска по другому ключу? - PullRequest
2 голосов
/ 28 апреля 2020

У меня есть двоичное дерево поиска в Java, которое содержит объект в каждом узле, объекты были добавлены в соответствии со свойством name. Который при прохождении перечисляет объекты в алфавитном порядке в соответствии с их именем, что хорошо. Хотя мне нужен метод, который будет перечислять объекты в порядке убывания в соответствии со свойством age. Так что в основном мне нужно временно отсортировать дерево, чтобы распечатать содержимое по порядку.

То, что я до сих пор придумал, - это обойти дерево и добавить каждый узел во временный массив, когда он закончил, массив подвергается сортировке слиянием. Это работает, но кажется относительно неэффективным и повышает сложность. Это первое двоичное дерево, которое мне пришлось создать, поэтому мой метод, вероятно, не нужен.

Наверное, мой вопрос в том, есть ли более эффективный способ приближения или размышления об этой проблеме для повторной сортировки дерева? Поскольку дерево будет совершенно случайным (с точки зрения возраста), я не могу придумать другого пути. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 28 апреля 2020

Кажется, что вы можете создать другое дерево, упорядоченное по возрасту, и всякий раз, когда вы добавляете элемент в первое дерево, вы также можете добавить этот же элемент во второе дерево. Это дает вам O (logN) для вставок в новое дерево и O (N) для обхода дерева и распечатки элементов против O (NlogN), который является средой выполнения для сортировки слиянием.

...