Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 27.12.2008, 23:37   #1
gilex
 
Регистрация: 27.12.2008
Сообщений: 6
По умолчанию бинарные деревья

"Составить программу, определяющую количество вершин к - того уровня бинарного дерева."
я формирую и вывожу дерево. ну вот сложность в том, что я и рекурсию пробовал и циклы всякие ничего неполучается а обход и подсчет количества вершин К-того уровня сделать не могу. вот фрагмент моей проги:

Program derevo;
Uses Crt;

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

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


{----формирование дерева----}

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 ClrScr;
Writeln ('Введите количество ключей дерева: ');
Readln (n);
Writeln ('Введите информ часть дерева: ');
For i:=1 To n Do
Begin
Read (с);
Vstavka (t,c);
End;
Print (t,c);
Writeln ('Введите уровень: ');
Readln (n);

А че тут дальше не пойму как реализовать. где-то в этой части проги должен быть подсчет количества вершин заданного уровня.

Readkey;
End.

подскажите пожалуйста. заранее благодарен.
gilex вне форума
Старый 28.12.2008, 21:48   #2
gilex
 
Регистрация: 27.12.2008
Сообщений: 6
По умолчанию

ребят ну чего никто в деревьях не понимает?
gilex вне форума
Старый 31.12.2008, 02:05   #3
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

на самом деле если дерево полноценное, количество элементов на каждом уровне определяется как 2^K, где K - уровень дерева ( ^ - степень ) - допустим на 4 уровне будет 16 элементов ( при полноценном дереве ) - а вообще если равновесное дерево - это либо 2^K либо (2^K)-1 - ну потому что дерево может быть сформировано не до конца ( где K - последний уровень ) вот, а если дерево нестандартное, то надо думать

да - и корень дерева - это нулевой уровень
capta1n вне форума
Старый 03.01.2009, 20:42   #4
gilex
 
Регистрация: 27.12.2008
Сообщений: 6
По умолчанию

блин да я не на столько дебил чтобы не понять, что 2^К - это полноценное дерево. я вас и прошу помочь додумать как считать, если дерево не полноценное... пожалуйста скоро уже сдавать надо...
gilex вне форума
Старый 04.01.2009, 01:39   #5
Stepler
Форумчанин
 
Аватар для Stepler
 
Регистрация: 03.02.2008
Сообщений: 213
По умолчанию

Вот держы! А процедурка довольно таки просатя.
Код:
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 pkv(tt:ss;nk:integer);
 begin
 if(nn=nk) then begin k:=k+1;;nn:=nn-1;exit;end;
 if(tt^.left<>nil)then begin nn:=nn+1;pkv(tt^.left,nk);end;
 if(tt^.right<>nil)then begin nn:=nn+1;pkv(tt^.right,nk);end;
 nn:=nn-1;
 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 ClrScr;
Writeln ('Vvedite koli4estvo klju4ej: ');
Readln (n);
For i:=1 To n Do
Begin
Read (c);
Vstavka (t,c);
End;
Print (t,c);
Writeln ('Vvedite urovenj: ');
Readln (n);
nn:=1;
k:=0;
pkv(t,n);
writeln('Koli4estvo vershun na ',n,' urovne = ',k);
Readkey;
End.
Пишу программы на заказ, контакты под аватаром!
Отзывы тут
Stepler вне форума
Старый 07.01.2009, 02:59   #6
gilex
 
Регистрация: 27.12.2008
Сообщений: 6
По умолчанию

Stepler, большое тебе спасибо. все работает. завтра пойду сдавать))) разобрался... оказывается все было так просто... еще раз СПАСИБО)))
gilex вне форума
Старый 13.05.2009, 03:21   #7
ABTOPuTET
Новичок
Джуниор
 
Регистрация: 13.05.2009
Сообщений: 2
По умолчанию

Stepler.....////От меня тож огром пасиБ...ВЫРУЧИЛ
Респект те браТ.

Последний раз редактировалось ABTOPuTET; 13.05.2009 в 03:57.
ABTOPuTET вне форума
Старый 23.06.2013, 16:55   #8
Mikheeva_Ksu
 
Регистрация: 20.06.2013
Сообщений: 6
По умолчанию

Stepler, а не могли бы вы мне помочь? дано бинарное дерево, нужно подсчитать количество уровней в дереве и отдельно количество листьев?
Mikheeva_Ksu вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарные деревья Марсель059 Общие вопросы C/C++ 3 20.05.2009 21:47
Бинарные деревья Влдислаав3911 Помощь студентам 2 21.05.2008 23:39
Бинарные деревья в С++ Go6a Помощь студентам 1 24.04.2008 16:31
бинарные деревья. ribka Помощь студентам 2 30.11.2007 18:13