![]() |
Модераторы: volvo877, Snowy, MetalFan |
![]() ![]() ![]() |
|
BCworm |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 23.8.2007 Репутация: нет Всего: нет |
Приветствую!
У меня вот такая проблема. Необходимо написать процедуры для вычисления свойства двоичного дерева. Само дерево у меня вроде бы получается. обход с лева на право вроде тоже с выводом элементов. Но мне еще необходимо вычислить размер дерева, высоту дерева, и вычислить контрольную сумму. Естественно первым делом перечитал кучу одинаковых букварей и вот что удалось родить в муках.
У меня есть схема необходимых алгоритмов на псевдокоде но я никак не могу до конца его понять. Помогите пожалуйста. Вот к примеру алгоритм вычисления размера дерева Определение размера дерева. Видно что используется рекурсия. Моя интерпритация -это процедура TSize но конечно же не все так просто. Size(p:pVertex) IF(p = NIL) := 0 ELSE Size := 1 + Size (pLeft)+ Size (pRight) FI
А вот к примеру определение высоты дерева Height(p:pVertex) IF(p = NIL) Height := 0 ELSE Height := 1+ max(Height(pLeft), Height(pRight)) В общем очевидно что мы с компилятором имеем разные мнения о правильности написания кода ![]() |
||||
|
|||||
Dobermann |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 992 Регистрация: 7.1.2008 Репутация: нет Всего: 0 |
У тебя не дерево - это двунаправленный список!!!
|
|||
|
||||
BCworm |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 23.8.2007 Репутация: нет Всего: нет |
Я делал по этому псевдокоду. Где ошибка то? Или в добавлении элемента к дереву?
type pVertex = ^tVertex; Vertex =record; tData: integer; Left: pVertex; Right: pVertex; end; VAR Root: pVertex; |
|||
|
||||
Dobermann |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 992 Регистрация: 7.1.2008 Репутация: нет Всего: 0 |
Я тебе говорю, в деревьях добавляется еще и индекс элемента!!! Иначе какой обход?!?!?!
|
|||
|
||||
BCworm |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 23.8.2007 Репутация: нет Всего: нет |
Хм. Уже везде все перерыл но нигде не нашел про индексы. Нашел еще несколько примеров инициализации, построения и обхода дерева но все они принципиально одинаковы только названия переменных разные. К примеру вот это http://www.rusedu.info/Article520.html.
Уже не знаю чему верить :( |
|||
|
||||
Dobermann |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 992 Регистрация: 7.1.2008 Репутация: нет Всего: 0 |
Забудь! Индексы добавляются для поиска!
|
|||
|
||||
BCworm |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 23.8.2007 Репутация: нет Всего: нет |
Во! я вот тоже седня читал читал, какието намеки были
![]() Но это проблемы не решает. Мне бы с процедурами разобраться. о которых я выше писал. размер дерева высота. Проблема очевидно в том что неправильно интерпретирую псевдокод. К примеру вот Size(p:pVertex) IF(p = NIL) := 0 ELSE Size := 1 + Size (pLeft)+ Size (pRight) FI Я вот написал вот так. но в чем моя ошибка? Естественно размер дерева нужно будет потом вывести. А как? write(Tsize) явно не так :(
|
|||
|
||||
Dobermann |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 992 Регистрация: 7.1.2008 Репутация: нет Всего: 0 |
Добавь тогда индекс для подсчёта высоты...
Т.е. с каждым номым обходом добавляй единицу. Размер дерева - кол-во его узлов??? |
|||
|
||||
volvo877 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2073 Регистрация: 15.11.2004 Репутация: 2 Всего: 116 |
Естественно... Вот и выведешь:
P.S. Не надо никаких дополнительных индексов, высота прекрасно считается и без них... |
||||
|
|||||
BCworm |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 23.8.2007 Репутация: нет Всего: нет |
Ну вот же. Вот же оно! Вроде начинаю прояснятся!
|
|||
|
||||
Dobermann |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 992 Регистрация: 7.1.2008 Репутация: нет Всего: 0 |
||||
|
||||
BCworm |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 23.8.2007 Репутация: нет Всего: нет |
Ну вот дошло дело и до определения высоты дерева. Там нужно использовать функцию судя по всему там нужно использовать функцию max.
Я написал вот такую функцию. Даже при подключенном math судя по всему нужно объяснить компилятору что означает буквосочетание max в моем коде. А как?
|
|||
|
||||
volvo877 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2073 Регистрация: 15.11.2004 Репутация: 2 Всего: 116 |
Разделом не ошибся? Где ты в стандартном Паскале видел модуль Math? Напиши свою функцию:
Можно уточнить, откуда у тебя этот "твой" код? Ибо если ты не знаешь, что в "твоем" коде означает max, то этот код совсем не твой, а скопированный тобой... Не присваивай себе чужого никогда... |
|||
|
||||
BCworm |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 23.8.2007 Репутация: нет Всего: нет |
Да я по псевдокоду это все сочиняю поэтому вот увидел там max и подумал что надо эту функцию использовать. Порыл гугль а там вроде как написано что есть некий модуль math... ![]() |
|||
|
||||
BCworm |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 23.8.2007 Репутация: нет Всего: нет |
И опять тупик. Осталось вычислить среднюю высоту дерева. А у меня нет ни псевдокода ни примера ни даже малейшего намека как это сделать :(. Гугль молчит. Может можно где нить почитать?
Рассуждая логически предположу что если высота дерева это длинна самой длинной ветки, то средняя высота эта наверное сумма всех этих путей со всех веток поделенная ... а на что поделенная то? на корень дерева? на количество ветвей? нигде ничего толком как будто я сам все это придумал и до меня никого это не волновало :( |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi" | |
|
Запрещается! 1. Обсуждать и делится взломанными компонентами или программным обеспечением 2. Публиковать ссылки на варез 3. Оффтопить
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |