Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 17.06.2020
Сообщений: 14

Бинарное дерево паскаль, минимальное значение

17.09.2020, 07:57. Показов 412. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста перевести бинарное дерево с с++ на паскаль. Само задание звучит так:Дан указатель Р на корень непустого дерева. Вывести минимальное из значений его вершин являющихся листьями. Вот сам код:
C++
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <iostream>
#include <Windows.h>
#include <conio.h>
#include <cmath>
using namespace std;
struct BinTree {
    int value; //содержит значение
    BinTree* left;//адрес левого поддерева
    BinTree* right;//адрес правого поддерева
};
//Функция для создания дерева
//Вход: значение будущего узла,узел бинарного дерева
//Выход: упорядоченое бинарное деревоб,заполеное значениями
void newBinTree(int val, BinTree** Tree) {
    if ((*Tree) == NULL)
    {
        (*Tree) = new BinTree; //Выделить память
        (*Tree)->value = val;  //Поместить в выделенное место аргумент
        (*Tree)->left = (*Tree)->right = NULL;
        return;
    }
    if (val > (*Tree)->value) newBinTree(val, &(*Tree)->right);//Если аргумент больше чем текущий элемент, поместить его вправо
    else newBinTree(val, &(*Tree)->left);//Иначе поместить его влево
}
//Для печати дерева
void Print(BinTree** Tree, int l)
{
    int i;
 
    if (*Tree != NULL)
    {
        Print(&((**Tree).right), l + 1);
        for (i = 1; i <= l; i++) cout << "   ";
        cout << (**Tree).value << endl;
        Print(&((**Tree).left), l + 1);
    }
}
 
void TreeTraversalAndPrint(BinTree* Root) {
    if (Root != NULL) {
        cout << Root->value << endl;
        TreeTraversalAndPrint(Root->left);
        TreeTraversalAndPrint(Root->right);
 
    }
}
 
void TreeTraversalAndPrint2(BinTree* Root) {
    if (Root != NULL) {
        TreeTraversalAndPrint2(Root->left);
        TreeTraversalAndPrint2(Root->right);
        cout << Root->value << endl;
    }
}
void TreeTraversalAndPrint3(BinTree* Root) {
    if (Root != NULL) {
        TreeTraversalAndPrint2(Root->left);
        cout << Root->value << endl;
        TreeTraversalAndPrint2(Root->right);
    }
}
//Так как в бинарном дереве поиска для каждого узла справедливо, что left < right, 
//то соответственно для нахождения наименьшенго элемента 
//надо топать от корня по левым веткам до упора - там и будет наименьший.
BinTree* MinValue(BinTree* Tree)
{
    if (Tree->left != NULL) {
        return MinValue(Tree->left);
    }
    else {
        return Tree;
    }
}
 
void DestroyBTree(BinTree* Tree) {
    if (Tree != NULL) {
        DestroyBTree(Tree->left);
        DestroyBTree(Tree->right);
        delete(Tree);
    }
}
void MenuProc() {
    BinTree* Tree = NULL;
    char variant;
    int val;
    cout << "Для проверки дерева его необходимо создать" << endl;
    while (_getch() != 27) {
        cout << "ведите значение (для завершения ввода нажмите ESC) ";
        cin >> val;
        newBinTree(val, &Tree);
    }
    Print(&Tree, 0);
    cout << "Прямой обход дерева" << endl;
    TreeTraversalAndPrint(Tree);
    cout << "Обратный обход дерева" << endl;
    TreeTraversalAndPrint2(Tree);
    cout << "Cимметричный обход дерева" << endl;
    TreeTraversalAndPrint3(Tree);
    cout << "Минимальный элемент дерева-> ";
    BinTree* min = MinValue(Tree);
    cout << min->value;
    DestroyBTree(Tree);
}
 
int main() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    MenuProc();
    system("pause");
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.09.2020, 07:57
Ответы с готовыми решениями:

Сформировать бинарное дерево, которое отражает служебные слова языка Паскаль
Сформировать бинарное дерево, которое отражает служебные слова алгоритмического языка Паскаль: IF, THEN, ELSE, CASE, OF, WHILE, DO, REPEAT,...

Исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру
Помогите, не могу понять!( Нужно исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру. вот...

Преобразовать идеальное бинарное дерево в бинарное дерево поиска
Всем привет, я создал идельное бинарное дерево и написал к нему функции. Как мне теперь можно преобразовать его в бинарное дерево поиска?...

6
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
17.09.2020, 08:30
cout - вывод на консоль, cin - ввод?

Добавлено через 5 минут
Сделал в меру своих познаний 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
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
type
  BinTree = class
    value: integer;
    left, right: BinTree;
  end;
 
procedure NewBinTree(val: integer; tree: BinTree);
begin
  if tree = nil then
  begin
    tree := new BinTree();
    tree.value := val;
    tree.left := nil;
    tree.right := nil;
    exit;
  end;
  
  if val > tree.value then NewBinTree(val, tree.right)
  else NewBinTree(val, tree.left);
end;
 
procedure Print(tree: BinTree; l: integer);
begin
  var i: integer;
  
  if tree <> nil then
  begin
    Print(tree.right, l + 1);
    for var i := 1 to l do 
    begin end;
      //cout << "   ";
        //cout << tree.value << endl;
    Print(tree.left, l + 1);
  end;
end;
 
procedure TreeTraversalAndPrint(root: BinTree);
begin
  if (root <> nil) then
  begin
        //cout << Root->value << endl;
    TreeTraversalAndPrint(root.left);
    TreeTraversalAndPrint(root.right);
    
  end;
end;
 
procedure TreeTraversalAndPrint2(root: BinTree);
begin
  if (root <> nil) then
  begin
    TreeTraversalAndPrint2(root.left);
    TreeTraversalAndPrint2(root.right);
    //cout << Root->value << endl;
  end;
end;
 
procedure TreeTraversalAndPrint3(root: BinTree);
begin
  if (root <> nil) then
  begin
    TreeTraversalAndPrint2(root.left);
        //cout << Root->value << endl;
    TreeTraversalAndPrint2(root.right);
  end;
end;
 
function MinValue(tree: BinTree): BinTree;
begin
  if (tree.left <> nil) then
    result := MinValue(tree.left)
  else
    result := tree;
end;
 
procedure DestroyBTree(tree: BinTree);
begin
  if (tree <> nil) then
  begin
    DestroyBTree(tree.left);
    DestroyBTree(tree.right);
  end;
end;
 
procedure MenuProc();
begin
  var tree: Bintree := nil;
  var variant: char;
  var val: integer;
    //cout << "Для проверки дерева его необходимо создать" << endl;
  while ({_getch() это вообще что?} <> 27) do
  begin
        //cout << "ведите значение (для завершения ввода нажмите ESC) ";
        //cin >> val;
    newBinTree(val, tree);
  end;
  
  Print(tree, 0);
    //cout << "Прямой обход дерева" << endl;
  TreeTraversalAndPrint(tree);
    //cout << "Обратный обход дерева" << endl;
  TreeTraversalAndPrint2(tree);
    //cout << "Cимметричный обход дерева" << endl;
  TreeTraversalAndPrint3(tree);
    //cout << "Минимальный элемент дерева-> ";
  var min: BinTree = MinValue(tree);
    //cout << min->value;
  DestroyBTree(tree);
end;
 
begin
  //SetConsoleCP(1251);
    //SetConsoleOutputCP(1251);
  MenuProc();
  //system("pause");
end.
1
0 / 0 / 0
Регистрация: 17.06.2020
Сообщений: 14
17.09.2020, 08:31  [ТС]
Да,вы все правильно поняли.
0
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
17.09.2020, 08:32
Cl1ck, ответите на вопрос в 91 строке - доделаю
0
0 / 0 / 0
Регистрация: 17.06.2020
Сообщений: 14
17.09.2020, 08:38  [ТС]
Он ожидает нажатия любой клавиши, в данной программе это esc для завершения ввода чисел в дерево

Добавлено через 1 минуту
точнее вот так:функция ждёт нажатия любой клавиши, и возвращает её код
0
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
17.09.2020, 08:46
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
type
  BinTree = class
    value: integer;
    left, right: BinTree;
  end;
 
procedure NewBinTree(val: integer; var tree: BinTree);
begin
  if tree = nil then
  begin
    tree := new BinTree();
    tree.value := val;
    tree.left := nil;
    tree.right := nil;
    exit;
  end;
  
  if val > tree.value then NewBinTree(val, tree.right)
  else NewBinTree(val, tree.left);
end;
 
procedure Print(tree: BinTree; l: integer);
begin
  if tree <> nil then
  begin
    Print(tree.right, l + 1);
    for var i := 1 to l do 
      Write('   ');
    Writeln(tree.value);
    Print(tree.left, l + 1);
  end;
end;
 
procedure TreeTraversalAndPrint(root: BinTree);
begin
  if (root <> nil) then
  begin
    Writeln(root.value);
    TreeTraversalAndPrint(root.left);
    TreeTraversalAndPrint(root.right);
    
  end;
end;
 
procedure TreeTraversalAndPrint2(root: BinTree);
begin
  if (root <> nil) then
  begin
    TreeTraversalAndPrint2(root.left);
    TreeTraversalAndPrint2(root.right);
    Writeln(root.value);
  end;
end;
 
procedure TreeTraversalAndPrint3(root: BinTree);
begin
  if (root <> nil) then
  begin
    TreeTraversalAndPrint2(root.left);
    Writeln(root.value);
    TreeTraversalAndPrint2(root.right);
  end;
end;
 
function MinValue(tree: BinTree): BinTree;
begin
  if (tree.left <> nil) then
    result := MinValue(tree.left)
  else
    result := tree;
end;
 
procedure DestroyBTree(tree: BinTree);
begin
  if (tree <> nil) then
  begin
    DestroyBTree(tree.left);
    DestroyBTree(tree.right);
  end;
end;
 
procedure MenuProc();
begin
  var tree: Bintree := nil;
  var variant: char;
  var val: integer;
  Writeln('Для проверки дерева его необходимо создать');
  try
    while (true) do
    begin
      val := ReadInteger('ведите значение (для завершения ввода введите строку)');
      newBinTree(val, tree);
    end;
  except;
  end;
  
  Print(tree, 0);
  Writeln('Прямой обход дерева');
  TreeTraversalAndPrint(tree);
  Writeln('Обратный обход дерева');
  TreeTraversalAndPrint2(tree);
  Writeln('Cимметричный обход дерева');
  TreeTraversalAndPrint3(tree);
  Write('Минимальный элемент дерева->');
  var min: BinTree = MinValue(tree);
  Write(min.value);
  DestroyBTree(tree);
end;
 
begin
  //SetConsoleCP(1251);
    //SetConsoleOutputCP(1251);
  MenuProc();
end.
0
0 / 0 / 0
Регистрация: 17.06.2020
Сообщений: 14
17.09.2020, 08:51  [ТС]
Премного благодарен за помощь QWQ >-<
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.09.2020, 08:51
Помогаю со студенческими работами здесь

Бинарное дерево поиска, если значение не меньше и не больше, а равно
Здравствуйте!!! Не могу понять почему исключается(по крайней мере я вот сейчас изучаю его и везде есть или меньше или больше) что...

Бинарное дерево: как происходит добавления элемента в дерево с двумя параметрами
Здравствуйте! Прошу помощи у опытных программистов...)))) Есть класс дерево: class class1 { public class Tree ...

Бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой
Дано бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой.

Бинарное дерево
Разработать и реализовать на языке С следующие функции работой с бинарным деревом: 1. Создание пустого дерева 2. Добавление элемента в...

Бинарное дерево
Подскажите алгоритм распечатки дерева на экран горизонтально, не вертикально, как обычно это делают. struct tree { int k;...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru