![]() |
|
Модераторы: Poseidon |
![]()
|
|
| BCworm |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 23.8.2007 Репутация: нет Всего: нет |
Приветствую!.
Прошу помощи в написании функции для вычисления средней высоты бинарного дерева. (Я уже поднимал тему про деревья на ветке про паскаль но её закрыли за оффтоп причем не мой Порыв гугль удалось найти чужой код для вычисления средней высоты. Но для правильной работы функции нужна функция (вычисляющая сумму длин ветвей на каждом уровне дерева
Судя по всему он написан по псевдокоду. Явно есть недоработки. Помогите пожалуйста уже неделю мучаюсь |
|||
|
||||
| volvo877 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2073 Регистрация: 15.11.2004 Репутация: 34 Всего: 116 |
Ну, напиши вот так:
На выходе получишь количество листьев дерева и суммарную длину путей до каждого из них. Все что останется - поделить S на leafs (если leafs <> 0, разумеется |
|||
|
||||
| BCworm |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 23.8.2007 Репутация: нет Всего: нет |
Спасибо большое!.
Вроде бы сдвинулось! я пока не закончил с этим заданием если можно пусть тема пока побудет открытой. Это сообщение отредактировал(а) BCworm - 30.7.2008, 09:22 |
|||
|
||||
| BCworm |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 23.8.2007 Репутация: нет Всего: нет |
Вот что я только что нашел!
...Для определения средней высоты дерева понадобится функция вычисления суммы длин путей от корня до каждой вершины на L-том уровне. Псевдокод алгоритма TreeAvSize (p: pVertex; L: -level) IF (p = NIL) TreeAvSize:= 0 ELSE TreeAvSize:= L + TreeAvSize(p Left, L+1) + TreeAvSize(p Right, L+1) FI Тогда средняя высота вычисляется следующим образом Ср высота дерева := TreeAvSize(Root, 1)/ TreeSize(Root) Тут получается что среднюю высоту дерева нужно поделить на размер. т.е на количество элементов? Кстати это кажется тот самый псевдокод по которому написан тот код который я показывал вначале. Кажется я опять запутался. На что делить то на количество листов -т.е на те узлы которые не имеют потомков или на количество узлов в общем т.е на количество элементов. |
|||
|
||||
| volvo877 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2073 Регистрация: 15.11.2004 Репутация: 34 Всего: 116 |
Ты других-то не путай! Тебе ясно сказали, что для того чтобы найти среднюю высоту дерева, нужно сумму высот (другими словами - длин путей от корня до листа) всех листьев разделить на их количество (листьев, разумеется). Нет, ты опять начинаешь находить какой-то бред: "чтобы найти среднюю высоту надо среднюю высоту поделить..." Ты нашел ее, чтобы делить? |
|||
|
||||
| BCworm |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 23.8.2007 Репутация: нет Всего: нет |
Ок все! Дошло!
volvo877 - Большое спасибо! А что делать если в одном месте написано так в другом эдак а в третьем вообще что то в роде ... построить двоичное дерево достаточно просто, настолько просто что мы даже не будем объяснять что это такое и как его построить. Вот и возникает кипа вопросов без ответа. Сейчас пробую заполнять дерево генератором. Опять же все элементарно, все получается но почемуто после заполнения дерева не срабатывает процедура вычисления характеристик а сразу осуществляется переход к началу программы. В принципе так и должно быть но в коде есть строчка readln котороя подразумевает что нужно дождаться нажатия клавиши а происходит чтото вроде перескакивания через команду.
Все функции вычисления характеристик работаю отлично при заполнении вручную, при заполнении заранее заданными значениями. Все это собрано в одну процедуру которая выполняется после создания дерева одним из способов. А вот после процедуры создания генератором почемуто происходит перепрыгивание сразу на начало программы. Хотя по тексту сначало должна выполниться процедура вычисления характеристик а затем ожидание нажатия кнопки press any key... |
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |