IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Бинарное дерево
Zigfried
сообщение 6.12.2010 13:00
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 49
Пол: Мужской

Репутация: -  0  +


Подскажите пожалуйста как можно написать итерационную процедуру подсчёта количества листьев в дереве
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.12.2010 13:26
Сообщение #2


Гость






В правом верхнем углу есть ссылка "Поиск". Почему не пользуешься? Все уже давно решено:

листья дерева-итеративный алгоритм
 К началу страницы 
+ Ответить 
Zigfried
сообщение 6.12.2010 13:29
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 49
Пол: Мужской

Репутация: -  0  +


Спасибо большое smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Zigfried
сообщение 13.12.2010 15:22
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 49
Пол: Мужской

Репутация: -  0  +


Прошу прощения что 2 раз обращаюсь в теме. Прошу помочь с дописанием задачи(плохо понимаю в модульном программировании).

Условие:
Посчитать количество листьев в бинарном дереве:
а)Не рекурсивно(с помощью стека)
б)Рекурсивно

Все нужные процедуры собраны в модулях.

Прикрепленный файл  Types.pas ( 320 байт ) Кол-во скачиваний: 306
Прикрепленный файл  Lyalikov22.pas ( 1.71 килобайт ) Кол-во скачиваний: 323
Прикрепленный файл  Unit1.pas ( 1.07 килобайт ) Кол-во скачиваний: 333


Сообщение отредактировано: Zigfried - 13.12.2010 15:31
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.12.2010 15:48
Сообщение #5


Гость






1) корректируешь функцию Leaves так, чтобы она не эмулировала стек, а его использовала:
function Leaves(t: ttree): integer;
var
s: TStack;
sp, counter: integer;
begin
Stack_Init(s);
counter := 0;
repeat
while t <> nil do
begin
Stack_Push(s, t);
t := t^.left;
end;
if s = nil then
begin
Leaves := counter;
exit;
end;
t := Stack_Pop(s);
if (T^.right = nil) and (T^.left = nil) then
inc(counter);
t := t^.right;
until false;
end;

2) подключаешь к модулю TreeUnit два модуля: Types и Stack, и к модулю Stack подключаешь Types.
3) описываешь правильный тип поля данных в стеке: он должен хранить не целые числа, а указатель на дерево:
unit Types;

interface
type
TTree = ^TNode;

Telem = TTree;
TStack = ^Telement;
Telement =
Record
Info: Telem;
Next: TStack
End;

T = Integer;
TNode =
record
value: T;
Left, Right: TTree;
end;

implementation
end.


Все, пишешь основную программу и проверяешь работоспособность.
 К началу страницы 
+ Ответить 
Zigfried
сообщение 13.12.2010 15:55
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 49
Пол: Мужской

Репутация: -  0  +


Спасибо за помощь smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 31.07.2025 9:06
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"