Учитывая представление массива Complete Binary Tree, т. Е. Если индекс i является родителем, индекс 2 * i + 1 является левым дочерним элементом, а индекс 2 * i + 2 является правым дочерним. Задача состоит в том, чтобы найти минимальное количество подкачки, необходимое для преобразования его в дерево двоичного поиска.
Примеры:
Input : arr[] = { 5, 6, 7, 8, 9, 10, 11 } Output : 3 Binary tree of the given array:Swap 1: Swap node 8 with node 5. Swap 2: Swap node 9 with node 10. Swap 3: Swap node 10 with node 7. So, minimum 3 swaps are required. Input : arr[] = { 1, 2, 3 } Output : 1 Binary tree of the given array: After swapping node 1 with node 2. So, only 1 swap required.
Идея состоит в том, чтобы использовать тот факт, что обход по бинарному дереву поиска происходит в порядке возрастания их значения.
Итак, найдите обход по двоичному дереву, сохраните его в массиве и попытайтесь отсортировать массив. Ответом будет минимальное количество свопов, необходимое для сортировки массива. Пожалуйста, обратитесь к посту ниже, чтобы найти минимальное количество перестановок, необходимое для сортировки массива.
Минимальное количество свопов, необходимое для сортировки массива
Сложность времени: O (n log n).
|
Выход:
3
Упражнение: Можем ли мы распространить это на обычное двоичное дерево, т. Е. На двоичное дерево, представленное с помощью левого и правого указателей и необязательно завершенное?
Эта статья предоставлена Anuj Chauhan . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Сложность различных операций в двоичном дереве, двоичном дереве поиска и дереве AVL
- Преобразовать двоичное дерево в двоичное дерево с резьбой | Набор 2 (Эффективный)
- Преобразовать двоичное дерево в двоичное дерево с резьбой | Установите 1 (используя очередь)
- Найти узел с минимальным значением в бинарном дереве поиска
- Сумма и произведение минимального и максимального элемента дерева двоичного поиска
- Найти узел с минимальным значением в бинарном дереве поиска с помощью рекурсии
- Разница между двоичным деревом и двоичным деревом поиска
- Преобразование двоичного дерева в двоичное дерево поиска
- Преобразование двоичного дерева в двоичное дерево поиска с использованием набора STL
- Подсчитайте количество деревьев двоичного поиска, присутствующих в двоичном дереве
- Преобразовать произвольное двоичное дерево в дерево, которое содержит свойство Children Sum
- Преобразовать данное двоичное дерево в дерево, которое содержит свойство Logical AND
- Преобразовать данное двоичное дерево в дерево, которое содержит свойство логического ИЛИ
- Преобразуйте бинарное дерево в его зеркальное дерево
- Поменяйте местами узлы в бинарном дереве каждого k-го уровня
0.00 (0%) 0 votes