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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2011, 14:24   #1
goo
 
Регистрация: 20.02.2011
Сообщений: 7
По умолчанию Посчитать количество вершин в бинарном дереве (процедура)

Добрый день, опытные программисты и любители.

У меня такая вот проблема: нужно написать процедуру (не целую программу, а только процедуру), которая бы посчитала количество всех вершин в бинарном дереве.
Я знаю, как написать процедуру подсчета вершин на указанном уровне (если понадобится, могу код дать) в дереве, а как все вершины посчитать - затрудняюсь придумать.

Кто захочет сделать, то лучше писать через обход дерева снизу вверх. Так получится проще, чем сверху вниз.
Еще я думаю, что нужно каждый уровень в дереве принимать за нулевой и считать там просто количество вершин.

Вот процедура вычисления вершин на указанном уровне:
Код:
procedure NodeCount(top: TreePtr; level: integer; var n: integer);
begin
  if (level >= 1) and (top <> nil) then
  begin
    if (level = 1) then
      n := n + 1;
    NodeCount(top^.left, level - 1, n);
    NodeCount(top^.right, level - 1, n);
  end;
end;
Знаю, что подсчет общего количества вершин не сложнее этой и будет занимать столько же строчек, только как реализовать, подскажите, знающие люди.

Последний раз редактировалось goo; 26.02.2011 в 14:31.
goo вне форума Ответить с цитированием
Старый 26.02.2011, 14:33   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

ИМХО:
Код:
a:=1;b:=100;cnt:=1;
while (a-b)>2 do begin
 inc(cnt,2);b:=b div 2;
end;
cnt - даст кол-во вершин.

P.S. Могу ошибаться, поскольку помню колледжовские задачки смутно
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.02.2011, 14:35   #3
goo
 
Регистрация: 20.02.2011
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
ИМХО:
Код:
a:=1;b:=100;cnt:=1;
while (a-b)>2 do begin
 inc(cnt,2);b:=b div 2;
end;
cnt - даст кол-во вершин.

P.S. Могу ошибаться, поскольку помню колледжовские задачки смутно
А можно как-то сделать через рекурсию? Да и как-то странно, не похоже это на обход дерева.
goo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посчитать количество записей в БД ACCESS Dux БД в Delphi 22 31.03.2015 20:36
Как посчитать количество знаков PARTOS Microsoft Office Excel 11 05.06.2010 22:46
Поиск в бинарном дереве не по ключу lebrosha Помощь студентам 2 26.05.2009 15:32
Удаление вершины в бинарном дереве lebrosha Помощь студентам 2 24.05.2009 13:51