Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 15.03.2012
Сообщений: 46
1

Определить число листьев дерева

11.04.2012, 15:52. Просмотров 1044. Ответов 1
Метки нет (Все метки)


Дерево формировать динамически. Заполнить двоичное дерево следующим образом: если число меньше или равно числу записанного в узле дерева, то перемещаемся по левой ветви дерева, иначе по правой ветви до тех пор, пока не встретится пустая связь. Данные, необходимые для формирования дерева считываются из файла.
a) Определить число листьев дерева;
b) На какой высоте находится наибольший элемент дерева;
c) Распечатать содержимое узлов дерева следующим образом: совершаем сначала обход узлов дерева слева, затем справа.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
uses crt;
type    ukaz=^el_tree;
     el_tree=record
          inf:integer;
         lev,prav:ukaz;
           end;
       files=file of integer;
var p:ukaz;
    n,max,k,i,i1,ur,x,l,j,s,a:integer;
    f:files;
procedure print_1(t:ukaz;i:integer);
var u:ukaz;
begin
 if (i=k)then begin
  if (t^.lev=nil)and(t^.prav<>nil)and(ur=0)  then
   begin new(u);u^.inf:=x;t^.lev:=u;u^.lev:=nil;u^.prav:=nil;ur:=1;end;
  if (t^.prav=nil)and(ur=0) then
   begin new(u);u^.inf:=x;t^.prav:=u;ur:=1;u^.lev:=nil;u^.prav:=nil;end;
   end else begin print_1(t^.prav,i+1); print_1(t^.lev,i+1);end;end;
procedure print_tree(t: ukaz; h:integer;x,y:integer);
var s:string[40];
    i:integer;
begin if (t<>nil) then begin
      GotoXY(x,y);write(t^.inf);s:='';
      for i:=1 to h-1 do s:=s+'+';
      if t^.prav<>nil then
    begin GotoXY(x+2,y);textcolor(14);write(s+'┐');textcolor(15);end;
      if t^.lev<>nil then
    begin GotoXY(x-h,y);textcolor(14);write('┌'+s);textcolor(15);end;
      print_tree(t^.lev,h div 2,x-h,y+2);print_tree(t^.prav,h div 2,x+h,y+2);
      if ur<y div 2 then ur:=y div 2;end;end;
procedure print(t:ukaz;i:integer);
begin
 if t<>nil then begin
  if (t^.prav=nil)and(t^.lev=nil)  then k:=k+1;
  print(t^.lev,i+1); print(t^.prav,i+1);end;end;
procedure print_u(t:ukaz;i:integer);
begin
 if t<>nil then begin
  write(t^.inf,' ');print_u(t^.lev,i+1); print_u(t^.prav,i+1);end;end;
procedure list(t:ukaz;h:integer);
begin
 if (t<>nil) then begin
  if (t^.inf>max) then begin k:=h+1;max:=t^.inf;end;
  list(t^.lev,h+1);
  list(t^.prav,h+1);end;end;
BEGIN ClrScr;textcolor(14);write('Введи число элементов дерева <=32: ');
 textcolor(15);readln(n);assign(f,'der.dat');rewrite(f);randomize;
 textcolor(14);write('Элементы дерева: ');textcolor(15);
 for i:=1 to n do
  begin a:=random(100);write(f,a);write(a,' ');end;close(f);
 new(p);p^.lev:=nil;p^.prav:=nil;reset(f);read(f, p^.inf);
 k:=1;j:=2;l:=2;i1:=1;
 for i:=1 to n-1 do
  begin ur:=0;read(f,x);Print_1(p,1);i1:=i1+1;
    if i1>j then begin k:=k+1;l:=l*2;j:=j+l;end;end;
 i1:=k+1;print_tree(p,16,40,4);writeln;writeln;writeln;k:=0;
 max:=p^.inf;k:=1;list(p,0);textcolor(14);
 write('макс. число равно ');textcolor(15);
 write(max);textcolor(14);write(' на уровне ');textcolor(15);writeln(k);
 k:=0;print(p,0);textcolor(14);write('число листьев равно ');textcolor(15);
 writeln(k);textcolor(14);
 write('распечатка дерева: ');textcolor(15);print_u(p,0);writeln;readln;
END.
Добавлено через 1 минуту
Объясните пожалуйста задачу полностью!)))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2012, 15:52
Ответы с готовыми решениями:

Определить количество листьев на каждом уровне дерева итеративным способом
Здравствуйте, необходима помощь. Необходимо написать процедуру, определяющую количество листьев на...

Нужно напечатать все элементы с листьев дерева
Привет! Нужна помощь с деревьями. Нужно напечатать все элементы с листьев дерева. Буду очень...

Вывести сумму значений всех листьев данного дерева
доброго всем времени суток) дали нам опять задачи и все бы хорошо,но про бинарные деревья я ничего...

Бинарные деревья. Рекурсивный алгоритм обработки (Преобразование дерева исключением всех его листьев.)
Прошу подсказать текст программы

1
0 / 0 / 0
Регистрация: 15.03.2012
Сообщений: 46
05.06.2012, 12:38  [ТС] 2
Что делают procedure print_tree, procedure list? Что означает type ukaz=^el_tree;
el_tree=record
inf:integer;
lev,prav:ukaz;????

Добавлено через 2 минуты
Какие структурированные типы используются???
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2012, 12:38

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Определить число узлов дерева, у которых имеются 2 потомка
a. Определить число узлов дерева, у которых имеются 2 потомка. b. Определить есть ли узел с данным...

Найти сумму листьев 2-ого дерева
function Kolvo(t:tree):integer; var k:integer; begin if t&lt;&gt;nil then begin if...

Процедура печати листьев бинарного дерева
2. Процедура печати листьев бинарного дерева

Посчитать количество листьев и неполных вершин заданного бинарного дерева
Всем привет. Нужна срочно помощь. Вот задание: 1.Посчитать количество листьев и неполных вершин...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.