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

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

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

> Вершины бинарного дерева., Нужна помощь
сообщение
Сообщение #1


Новичок
*

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

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


Добрый день! Нужна небольшая помощь. Задача имеет такое условие: По уровнево распечатать вершины бинарного дерева снизу вверх. Слабо понимаю как надо это сделать. Понимаю, что надо подсчитать количество вершин, потом создать две рекурсии одна будет в цикле начиная с последнего увронвя вершин посылать переменную в другую функцию которая будет идитить, пока не достигнет переданного значения, когда достигнет, должна распечатать, и так каждый раз, пока не дойдет до начала. Но как это реализовать, не могу понять. У меня даже полноценный подсчет вершин почему-то очень криво получается...
вот моя горе-программа, был бы рад, если б кто-нибудь обьяснил...

Program derevo;
Uses Crt;

Type inform = Integer;
ss = ^zveno;
zveno = Record
key: Integer;
inf: Inform;
left, right: ss;
End;

Var t:ss;
n,nn,c,i,k: Integer;

Procedure Search(tt:ss; var k:integer);
begin
if (tt^.right<>nil) and (tt^.left<> nil) then
Begin
search(tt^.right,k);
k:=k+1;
search(tt^.left,k);
End
else
if (tt^.right<>nil) or (tt^.left<>nil) then
begin

k:=k+1;
if tt^.right<> nil then search(tt^.right,k);
if tt^.left<>nil then search(tt^.left,k);
end;
end;


Procedure Vstavka (Var p: ss; x: Integer);
Begin
If p = Nil Then
Begin
New (p);
p^.inf:=x;
p^.key:=1;
p^.left:=Nil;
p^.right:=Nil;
End;
If x<p^.inf Then Begin Vstavka (p^.left,x); End;
If x>p^.inf Then Begin Vstavka (p^.right,x); End;
End;



Procedure Print (Var p: ss; h: Integer);
Var i: Integer;
Begin
If p <> Nil Then
Begin
Print(p^.right,h+4);
For i:=1 To h Do Write (' ');
Writeln (p^.inf);
Print (p^.left,h+4);
End;
End;

Begin

Writeln ('Vvedite koli4estvo klju4ej: ');
Readln (n);
For i:=1 To n Do
Begin
Read ©;
Vstavka (t,c);
End;
Print (t,c);
k:=0;
Search(t,k);
writeln(k);
Readln;
readln;
End.


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 





- Текстовая версия 5.05.2024 14:11
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name