0 / 0 / 0
Регистрация: 23.10.2017
Сообщений: 8
1

Бинарное древо.Определить самую короткую «ветвь» дерева (или несколько ветвей)

19.12.2017, 19:16. Показов 935. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть готовое древо, нужно написать процедуру которая выведет самую короткую ветвь (ветви).
Само древо будет выглядеть так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
                  (7)
              _____|_____
             /           \
           (5)           (9)
          __|__         __|__
         /     \       /     \
       (3)     (6)   (8)     (10)
       _|_ 
      /   \
    (1)   (4)
      \
       \
       (2)
И самые короткие в данном случае: 1) 7,5,6; 2) 7,9,8; 3) 7,9,10
Вообще без понятия как это реализовать.
Вот код
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
type
PTree = ^ TTree; {указатель на узел дерева}
TTree = record      {узел дерева}
        Data: integer;
        Left, Right: PTree;
end;
 
var Tree: PTree;
 
procedure writelnD(data:string; num:integer; bool:boolean);//печать с num отступами '-'
begin if bool=true then begin for var i:=1 to num do write('-'); writeln(data); end; end;
 
//*******************Добавление_Элемента***********************//
procedure Add_Tree(x:integer;var Tree: Ptree);
begin
  //прямой порядок обхода
  if Tree=nil then begin
    New(Tree);
    Tree^.Data:=x;
  end else if(x<Tree^.Data)then
    if(Tree^.Left=nil)then begin
      New(Tree^.Left);
      Tree^.Left^.Data:=x
    end else Add_Tree(x,Tree^.Left)
    else if(Tree^.Right=nil)then begin
      New(Tree^.Right);
      Tree^.Right^.Data:=x
    end else Add_Tree(x,Tree^.Right);
end;
 
//*******************Печать_Левы_Потомков***********************//
function Print_Tree_Dop(Tree: Ptree;i:integer; bool:boolean:=true): boolean;
begin
  if Tree=nil then exit;
  //прямой порядок обхода
  writelnD(IntToStr(Tree^.Data),i, bool);//корень
  if (Tree^.Left=nil) and (Tree^.Right<>nil) then else  Print_Tree_Dop(Tree^.Left,i+1,true);//левый
  Print_Tree_Dop(Tree^.Right,i+1,false);//правый
  Print_Tree_Dop:=true;
end;
 
//*******************Печать_Дерева***********************//
function Print_Tree(Tree: Ptree;i:integer; bool:boolean:=true): boolean;
begin
  if Tree=nil then exit;
  writelnD(IntToStr(Tree^.Data),i, bool);//корень
  if (Tree^.Left=nil) and (Tree^.Right<>nil) then  else Print_Tree(Tree^.Left,i+1,true);//левый
  Print_Tree(Tree^.Right,i+1,true);//правый
  Print_Tree:=true;
end;
 
//*******************Очиска_Дерева***********************//
function Clear_Tree(var Tree: Ptree): boolean;
begin
  if Tree=nil then exit;
  //обратный порядок обхода
  Clear_Tree(Tree^.Left);//левый
  Clear_Tree(Tree^.Right);//правый
  dispose(Tree); Tree:=nil;//корень
  Clear_Tree:=true;
end;
 
begin
  var kom:integer;
  var a: array [1..10] of integer := (7, 5, 9, 3, 1, 10, 6, 8, 4, 2);
  for var i:=1 to 10 do Add_Tree(a[i],Tree);
  while true do begin
    writeln('-----------МЕНЮ-----------');
    writeln('1 - построение дерева по умолчанию');
    writeln('2 - печать дерева');
    writeln('3 - добавление элемента в дерево');
    writeln('4 - очистка дерева');
    writeln('5 - Печать левых потомков');
    writeln('6 - Выход');
    write('Команда: ');
    readln(kom);
    writeln;
  case kom of
    1: begin Clear_Tree(Tree); for var i:=1 to 10 do Add_Tree(a[i],Tree); writeln('Дерево построено по умолчанию'); end;
    2: begin if Print_Tree(Tree,0,true)=false then writeln('Дерево пустое!');end;
    3: begin
      write('Введите новое число: '); readln(kom);
      Add_Tree(kom,Tree);
      writeln('Число успешно добавлено.');
    end;
    4: if Clear_Tree(Tree) then writeln('Дерево успешно очищено.')
       else writeln('Дерево пустое!');
    5: if Print_Tree_Dop(Tree,0,false)=false then writeln('Дерево пустое!');
    7: exit;
    else writeln('Ошибка: Неверный номер команды!');
  end;
  writeln(' ');
  end;
end.
Добавлено через 1 час 35 минут
Было бы просто замечательно, если решение будет именно в этом коде.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.12.2017, 19:16
Ответы с готовыми решениями:

Бинарное дерево - Просмотр дерева в следующем порядке: узел, левая ветвь, правая ветвь
3. Разработать программу работы с бинарным деревом. Программа должна содержать следующие процедуры,...

Как в АВЛ-дереве найти самую короткую ветвь и удалить ее?
Доброго времени суток. Нужна помощь. В АВЛ-дереве надо найти самую короткую ветвь и удалить ее. Я...

Определить самую длинную и самую короткую строку файла
помогите пожалуйста,нужно сделать прогу что бы считывало с файла строки ,определяло самую длинную...

Определить самую длинную и самую короткую из введенных строк
Необходимо организовать ввод 3 названия городов. А потом вывести на экран консольно самое длинное и...

0
19.12.2017, 19:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2017, 19:16
Помогаю со студенческими работами здесь

Определить самую короткую строку текстового файла
помогите пожалуйста

Дано три строки. Определить самую длинную и короткую
Всем привет. Вот полное задание: &quot;Введи с клавиатуры 3 строки в самой длинной поменяй первое слово...

Дан текстовый файл определить самую длинную и короткую строку
Дан текстовый файл определить самую длинную и короткую строку и поменять их местами.

В тексте найти самую длинную и самую короткую строки и поменять их местами
в тексте найти самую длинную и самую короткую строки и поменять их местами


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru