Im пытается придумать алгоритм для удаления дубликатов из двоичного дерева/дерева двоичного поиска. Пока что лучшее, что я мог придумать, былоУдалить дубликаты из двоичного дерева
Магазин Обход обхода дерева в массиве.
Если дерево не имеет порядка, сортируйте массив.
удалите дубликаты из массива и восстановите двоичное дерево.
Нужно ли хранить предварительный обход дерева и реконструировать дерево?
Это ставит сложность на O(n log n)
раз и O(n)
пространство. Мы можем сделать лучше? Псевдо образцы кода/кода будут оценены
EDIT 1: Предположим, что структура двоичного дерева задается следующим объектом
public class Node
{
int data;
Node right;
Node left;
// getters and setters for the left and right nodes
}
Бинарное дерево и двоичное дерево поиска потребуют совершенно разных подходов. – Dukeling
Имеет ли значение * как * вы восстанавливаете двоичное дерево? Обратите внимание, что при обходе обхода теряется исходная древовидная структура; все, что напоминает реконструкцию, должно было бы ссылаться на исходное дерево (которое выполнимо, просто сохраните ссылку или индекс с данными обхода). В любом случае вам нужно будет указать, что делать с удаленными дубликатами. – comingstorm
Нет. Неважно, как реконструируется дерево. – KodeSeeker