2010-06-25 2 views
0

У меня есть вопрос, что в структуре данных кучи левый ребенок может быть больше, чем правильный ребенок на своем собственном уровне? Я имею в виду, что рассмотрю эти три числа 9,5,8, и я хочу создать структуру данных с максимальной суммой, так что корень будет равен 9, и верно ли, что 8 - его левый ребенок, а 5 - его правильный ребенок? , пожалуйста, помогите мне спасибоо куче (max-heap и min heap)

ответ

2

Это не имеет значения. У узла в макс-куче должны быть дети, которые ниже, а узел в мини-куче должен иметь детей, которые больше. Это единственные требования.

+0

так что нет правила для того, как мы устанавливаем левый и правый дочерний элемент родителя? Потому что куча почти полного двоичного дерева, и я думаю, что это было правилом в двоичном дереве, которое оставило ребенка, должно быть меньше этого правильного ребенка! Я думаю, что для моего приведенного выше примера я должен написать «root: 9» и «leftChild: 5» и «rightChild: 8», не так ли? – user355002

+0

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

+0

aha, и если мы хотим найти ключ в этой структуре данных, нам не нужно делать это как двоичное дерево поиска? – user355002

0

Max-Heap свойства:

  1. корень максимальный элемент. O (1) время для поиска максимального элемента.
  2. Детей всегда меньше, чем корень любого поддерева. (Нет никаких условий между левыми и правыми детьми)
  3. Минимального элемент лежит где-то в листовых элементах, т.е. O (п/2) == O (n) требуется время, чтобы найти минимальный элемент.

Мин-вороха свойства:

  1. Корень является элементом мин. O (1) время для поиска мимического элемента.
  2. Дети всегда больше, чем корень любого поддерева. (Нет никаких условий между левой и правой детей)
  3. Максимальный элемент лежит где-то в листовых элементов, т.е. O (п/2) == O (n) требуется время, чтобы найти максимальный элемент.

Следовательно, куча не подходит для поиска, но используется для сортировки массива элементов, поскольку поиск принимает линейное время O (n).

Для поиска мы всегда можем искать деревья двоичного поиска (BST), которые делают то же самое в O (h) времени. И в лучшем случае он выполнит поиск в O (logn), если дерево BS будет сбалансировано.

Смежные вопросы