Для того чтобы определить высоту случайного дерева поиска (СДП), построенного для данной последовательности данных, мы должны построить это дерево и посчитать количество ребер от корня до самого дальнего листа.
Шаг 1: Построение СДП
Для построения СДП, мы берем первый элемент последовательности (5) в качестве корня дерева.
Шаг 2: Вставка элементов в СДП
Далее, мы поочередно вставляем остальные элементы последовательности в дерево.
- Вставляем элемент 8: поскольку он больше, чем 5, он становится правым ребенком корня.
- Вставляем элемент 18: поскольку он больше, чем 8, он становится правым ребенком узла 8.
- Вставляем элемент 3: поскольку он меньше, чем 5, он становится левым ребенком корня.
- Вставляем элемент 8: поскольку он больше, чем 5, но меньше, чем 8 (который уже есть в дереве), он становится правым ребенком узла 5.
- Вставляем элемент 6: поскольку он больше, чем 5, но меньше, чем 8, он становится левым ребенком узла 8.
- Вставляем элемент 5: поскольку он равен 5 (корень уже содержит 5), мы пропускаем этот шаг.
- Вставляем элемент 1: поскольку он меньше, чем 5, но меньше всех элементов в дереве, он становится левым ребенком узла 3.
- Вставляем элемент 4: поскольку он больше, чем 1, но меньше, чем 5, он становится правым ребенком узла 1.
- Вставляем элемент 6: поскольку он больше, чем 5, но меньше, чем 8, он становится правым ребенком узла 5.
Таким образом, дерево получается следующим:
5
/ \
3 8
/ / \
1 6 18
\
4
/
6
Шаг 3: Определение высоты дерева по количеству ребер
Чтобы определить высоту дерева по количеству ребер, мы можем использовать алгоритм обхода в глубину (DFS). Мы начинаем с корня дерева и рекурсивно идем вглубь каждой ветки, увеличивая счетчик с каждым шагом. Когда мы достигаем листа (узла, у которого нет ребер к детям), мы заносим значение счетчика в список результатов.
В нашем случае, выглядит следующим образом:
1. Начинаем с корня (5) и вызываем DFS с счетчиком 0.
2. Переходим к левому ребенку (3) и вызываем DFS с счетчиком 1.
3. Переходим к левому ребенку (1) и вызываем DFS с счетчиком 2.
4. Достигаем листа (1) и добавляем значение счетчика (2) в список результатов.
5. Возвращаемся к узлу 3 и переходим к его правому ребенку (4) и вызываем DFS с счетчиком 2.
6. Достигаем листа (4) и добавляем значение счетчика (2) в список результатов.
7. Возвращаемся к узлу 3 и переходим к его родительскому узлу (5).
8. Переходим к правому ребенку (8) и вызываем DFS с счетчиком 1.
9. Переходим к левому ребенку (6) и вызываем DFS с счетчиком 2.
10. Достигаем листа (6) и добавляем значение счетчика (2) в список результатов.
11. Возвращаемся к узлу 8 и переходим к его правому ребенку (18) и вызываем DFS с счетчиком 2.
12. Достигаем листа (18) и добавляем значение счетчика (2) в список результатов.
13. Возвращаемся к узлу 8 и переходим к его родительскому узлу (5).
14. Возвращаемся к корню (5).
В итоге, список результатов имеет значения [2, 2, 2]. Максимальное значение в этом списке (2) является высотой дерева по количеству ребер.
Таким образом, высота данного случайного дерева поиска равна 2.
Шаг 1: Построение СДП
Для построения СДП, мы берем первый элемент последовательности (5) в качестве корня дерева.
Шаг 2: Вставка элементов в СДП
Далее, мы поочередно вставляем остальные элементы последовательности в дерево.
- Вставляем элемент 8: поскольку он больше, чем 5, он становится правым ребенком корня.
- Вставляем элемент 18: поскольку он больше, чем 8, он становится правым ребенком узла 8.
- Вставляем элемент 3: поскольку он меньше, чем 5, он становится левым ребенком корня.
- Вставляем элемент 8: поскольку он больше, чем 5, но меньше, чем 8 (который уже есть в дереве), он становится правым ребенком узла 5.
- Вставляем элемент 6: поскольку он больше, чем 5, но меньше, чем 8, он становится левым ребенком узла 8.
- Вставляем элемент 5: поскольку он равен 5 (корень уже содержит 5), мы пропускаем этот шаг.
- Вставляем элемент 1: поскольку он меньше, чем 5, но меньше всех элементов в дереве, он становится левым ребенком узла 3.
- Вставляем элемент 4: поскольку он больше, чем 1, но меньше, чем 5, он становится правым ребенком узла 1.
- Вставляем элемент 6: поскольку он больше, чем 5, но меньше, чем 8, он становится правым ребенком узла 5.
Таким образом, дерево получается следующим:
5
/ \
3 8
/ / \
1 6 18
\
4
/
6
Шаг 3: Определение высоты дерева по количеству ребер
Чтобы определить высоту дерева по количеству ребер, мы можем использовать алгоритм обхода в глубину (DFS). Мы начинаем с корня дерева и рекурсивно идем вглубь каждой ветки, увеличивая счетчик с каждым шагом. Когда мы достигаем листа (узла, у которого нет ребер к детям), мы заносим значение счетчика в список результатов.
В нашем случае, выглядит следующим образом:
1. Начинаем с корня (5) и вызываем DFS с счетчиком 0.
2. Переходим к левому ребенку (3) и вызываем DFS с счетчиком 1.
3. Переходим к левому ребенку (1) и вызываем DFS с счетчиком 2.
4. Достигаем листа (1) и добавляем значение счетчика (2) в список результатов.
5. Возвращаемся к узлу 3 и переходим к его правому ребенку (4) и вызываем DFS с счетчиком 2.
6. Достигаем листа (4) и добавляем значение счетчика (2) в список результатов.
7. Возвращаемся к узлу 3 и переходим к его родительскому узлу (5).
8. Переходим к правому ребенку (8) и вызываем DFS с счетчиком 1.
9. Переходим к левому ребенку (6) и вызываем DFS с счетчиком 2.
10. Достигаем листа (6) и добавляем значение счетчика (2) в список результатов.
11. Возвращаемся к узлу 8 и переходим к его правому ребенку (18) и вызываем DFS с счетчиком 2.
12. Достигаем листа (18) и добавляем значение счетчика (2) в список результатов.
13. Возвращаемся к узлу 8 и переходим к его родительскому узлу (5).
14. Возвращаемся к корню (5).
В итоге, список результатов имеет значения [2, 2, 2]. Максимальное значение в этом списке (2) является высотой дерева по количеству ребер.
Таким образом, высота данного случайного дерева поиска равна 2.