Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620

Как сравнить между собой ветки бинарного дерева?

08.07.2019, 19:58. Показов 2645. Ответов 14

Студворк — интернет-сервис помощи студентам
Ребят, как сравнить между собой ветки бинарного дерева, точнее сравнить правую ветку с левой и так по всему дереву, а потом вывести минимальный элемент каждой ветки... вроде просто но я туплю
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.07.2019, 19:58
Ответы с готовыми решениями:

подсчитать среднее арифметическое элементов и сравнить между собой.
Введите с клавиатуры одномерный массив S(B), элементами которого являются по- ложительные и отрицательные целые числа. Сформируйте массив...

Найти среднее значение массивов А[1..5], B[1..5] и сравнить их между собой. Вывести на экран большие из них
В программе использивать подпрограмму-функцию)

Построение бинарного дерева. Обход дерева
Построить дерево поиска с элементами – числами. С использованием операций Locate и DeleteLeft найти узел с заданным значением и исключить...

14
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
09.07.2019, 10:13
Вы за три месяца так и не смогли разобраться с деревьями?

Сначала ответьте на вопрос: что такое бинарное дерево и для чего оно строится?
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
09.07.2019, 14:00  [ТС]
Цитата Сообщение от JuriiMW Посмотреть сообщение
Сначала ответьте на вопрос: что такое бинарное дерево и для чего оно строится?
ну это вроде дерево с двумя ветками,, строится вроде чтоб быстрее находить нужную информацию в ней... мне по заданию надо сравнить ветки, а я строю дерево по типу меньшее влево, большее вправо, а как сделать чтоб оно рандомно дальше строилось я даже хз, ведь ему надо указывать куда в какую ветку что заносить
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
09.07.2019, 18:01
Вот я и говорю, что за три месяца (с первой вашей темы про деревья) вы о них и понятия не имеете!
Дальнейший диалог считаю бесполезной тратой времени.
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
09.07.2019, 19:33  [ТС]
Цитата Сообщение от JuriiMW Посмотреть сообщение
Дальнейший диалог считаю бесполезной тратой времени.
окей
Миниатюры
Как сравнить между собой ветки бинарного дерева?  
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
09.07.2019, 21:27  [ТС]
if T^.Left < T^.Right then
Операция '>' не применима к типу ^Ttree почему? там же цифры, почему он их не сравнивает, как мне тогда ветки дерева сравнить?

Добавлено через 13 минут
так да? вот само задание:
Кликните здесь для просмотра всего текста
(Дан указатель P1 на корень непустого дерева. Вывести минимальное из значений всех его вершин и количество листьев, имеющих это минимальное значение (данное количество может быть равно 0)
я просто не знаю то я сделал или не то... вроде то


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
const n: array[1 .. 9]of integer=(20,10,30,15,40,25,45,5,35); 
type
  TPtree = ^Ttree;
  Ttree = Record
    Dat : integer;
    Left: TPtree;
    Right: TPtree;
  End;
var
  T : TPtree;
  i,y,c: integer;
//
procedure AddToT( var T: TPtree; Y:integer);  //заполнение древа
 begin
  if T = nil then begin
    New(T);
     T^.Dat := n[i];
      T^.Left := nil;
       T^.Right := nil
   end else
  if n[i] < T^.Dat then
     AddToT(T^.Left, n[i])
  else 
     AddToT(T^.Right, n[i]);
end; 
//
procedure Output(T:TPtree);  //вывод левой ветки древа
 begin
  if T=nil then 
   exit;   
  Output(T^.Left);  
   write(' ',T^.Dat);
   inc(c);
end;
//
 begin                      //сама программа
  for i := 1 to 9 do
   begin
  AddToT(T, Y);
   end; 
    begin
   c:=0;
  write(' Минимальные значения: ');
     Output(T);
     writeln;
     write(' Количество листьев с минимальным значением: ', c);
    end;
  end.
Добавлено через 1 минуту
блин, у меня вершины по заданию, а как минимальные значения всех вершин вывести я даже не знаю,

Добавлено через 3 минуты
А как вершины дерева то вывести, ещё и минимальные.... ну минимальные то левые, получается все T^.Left вершины.... но вершины, как эту вершину выделить, If T^.Right = Nill then wtire T.^Left ?? так что ли? а если просто T^.Right отсутствует а несколько T.^Left подряд, как тогда... меня этому не учили, как сделать то чего я не знаю?
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
10.07.2019, 22:10  [ТС]
никто не знает как левые вершины дерева вывести?

Добавлено через 21 секунду
ну да, нигде ведь об этом не написано,

Добавлено через 24 секунды
откуда мне тогда знать как это делать, если меня этому не учили
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
10.07.2019, 22:17  [ТС]
он чёт мне постоянно такие ошибки выдаёт, когда я пытаюсь вывести все левые вершины дерева
Миниатюры
Как сравнить между собой ветки бинарного дерева?  
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
10.07.2019, 22:45  [ТС]
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function Depth(T:TPtree) : Integer;
var L, R : Integer;
begin
   if T=nil then Depth:=0
   else
   begin
     L := Depth(T^.Left);
      if L>R then R:=L;
      if (L=0) and (R>0) then write(R);
       R:=L;
       Depth := L + 1;
       write(R);
   end;
end;
почему он не выводит R ?
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
12.07.2019, 18:22  [ТС]
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function Depth(T:TPtree) : Integer;    {счётчик уровней}
begin
   if T=nil then Depth:=0
   else
   begin
     L := Depth(T^.Left);
      if L>R then R:=L;
       if (L=0) and (R>0)
       then write(' ',R);
       R:=L;
       Depth := L + 1;
   end;
end;
      Depth(T);
      write(' ',R);
минимальные вершины нашел, как теперь вывести данные записанные в них?

Добавлено через 16 секунд
как вывести вершины дерева
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
17.07.2019, 22:51  [ТС]
ребят, подскажите хотя бы алгоритм для вывода вершины дерева, не листьев, а вершин
0
 Аватар для Jener
228 / 225 / 220
Регистрация: 03.07.2012
Сообщений: 466
18.07.2019, 13:43
Лучший ответ Сообщение было отмечено ololo111 как решение

Решение

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
const n: array[1 .. 9]of integer=(20,10,30,15,40,25,45,5,35);
type
  TPtree = ^Ttree;
  Ttree = Record
    Dat : integer;
    Left: TPtree;
    Right: TPtree;
  End;
var
  T, p : TPtree;
  i,y,c: integer;
//
procedure AddToT( var T: TPtree; Y:integer);  //заполнение древа
 begin
  if T = nil then begin
    New(T);
     T^.Dat := Y;
      T^.Left := nil;
       T^.Right := nil
   end else
  if Y < T^.Dat then
     AddToT(T^.Left, Y)
  else
     AddToT(T^.Right, Y);
end;
//
procedure Output(T:TPtree);  //вывод левой ветки древа
 begin
  if T=nil then
   exit;
  Output(T^.Left);
   write(' ',T^.Dat);
  Output(T^.Right);
end;
function MinNode(T : TPTree) : TPTree;
begin
  if T = nil then exit;
 
  if T^.Left = nil then MinNode := T
  else MinNode := MinNode(T^.Left);
 
end;
 
//
 begin                      //сама программа
  for i := 1 to 9 do
   AddToT(T, n[i]);
 
   Output(T);
   writeln;
 
 
  c:=0;
  if MinNode(T)^.Right = nil then c := 0            //правый потомок узла с мин значением пуст - листьев у минимального значения нет
  else if (MinNode(T)^.Right^.Left = nil) and (MinNode(T)^.Right^.Right = nil) then //правый потомок узла с минимал значением лист - не имеет потомков
  c := 1;
  write(' Минимальные значения: ',MinNode(T)^.Dat);
 
  write(' Количество листьев с минимальным значением: ', c);
 
 
    readln;
  end.
1
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
18.07.2019, 18:28  [ТС]
Цитата Сообщение от Торович Посмотреть сообщение
Кликните здесь для просмотра всего текста
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
const n: array[1 .. 9]of integer=(20,10,30,15,40,25,45,5,35);
type
* TPtree = ^Ttree;
* Ttree = Record
* * Dat : integer;
* * Left: TPtree;
* * Right: TPtree;
* End;
var
* T, p : TPtree;
* i,y,c: integer;
//
procedure AddToT( var T: TPtree; Y:integer); *//заполнение древа
*begin
* if T = nil then begin
* * New(T);
* * *T^.Dat := Y;
* * * T^.Left := nil;
* * * *T^.Right := nil
* *end else
* if Y < T^.Dat then
* * *AddToT(T^.Left, Y)
* else
* * *AddToT(T^.Right, Y);
end;
//
procedure Output(T:TPtree); *//вывод левой ветки древа
*begin
* if T=nil then
* *exit;
* Output(T^.Left);
* *write(' ',T^.Dat);
* Output(T^.Right);
end;
function MinNode(T : TPTree) : TPTree;
begin
* if T = nil then exit;
if T^.Left = nil then MinNode := T
* else MinNode := MinNode(T^.Left);
end;
//
*begin * * * * * * * * * * *//сама программа
* for i := 1 to 9 do
* *AddToT(T, n[i]);
Output(T);
* *writeln;
c:=0;
* if MinNode(T)^.Right = nil then c := 0 * * * * * *//правый потомок узла с мин значением пуст - листьев у минимального значения нет
* else if (MinNode(T)^.Right^.Left = nil) and (MinNode(T)^.Right^.Right = nil) then //правый потомок узла с минимал значением лист - не имеет потомков
* c := 1;
* write(' Минимальные значения: ',MinNode(T)^.Dat);
write(' Количество листьев с минимальным значением: ', c);
readln;
* end.
Выдаёт: 5 10 15 20 25 30 35 40 45
Минимальные значения: 5 Количество листьев с минимальным значением: 0

да дело в том что мне вершины нужны, вершину с минимальным значением надо вывести, ветки то у меня уже сделаны давно, они и находятся, и выводятся, и подсчитывается их количество... а нужны вершины, но у меня и вершины с минимальным значением находятся, даже глубина находится и выводится, а вот то что записано в самой вершине T^.Data мне не вывести,, надеюсь поиск вершины с минимальным значением у меня правильный, а то я уже и не помню как его делал,
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
const n: array[1 .. 9]of integer=(20,10,30,15,40,25,45,5,35); 
type
  TPtree = ^Ttree;
  Ttree = Record
    Dat : integer;
    Left: TPtree;
    Right: TPtree;
  End;
var
  T : TPtree;
  i,y,c,L,R: integer;
//
procedure AddToT( var T: TPtree; Y:integer);  //заполнение древа
 begin
  if T = nil then begin
    New(T);
     T^.Dat := n[i];
      T^.Left := nil;
       T^.Right := nil
   end else
  if n[i] < T^.Dat then
     AddToT(T^.Left, n[i])  //минимальное значение в левую ветку
  else 
     AddToT(T^.Right, n[i]);
end; 
//
procedure Output(T:TPtree);  //вывод левой ветки
 begin
  if T=nil then 
   exit;   
  Output(T^.Left);  
   write(' ',T^.Dat);
   inc(c);
end;
//
function Depth(T:TPtree) : Integer;    {поиск вершины с мин.значением!!!}
begin
   if T=nil then Depth:=0
   else
   begin
     L := Depth(T^.Left);
      if L>R then R:=L;
       if (L=0) and (R>0)
       then write(' ',R);
       R:=L;
       Depth := L + 1;
   end;
end;
//
 begin                      //сама программа
  for i := 1 to 9 do
   begin
  AddToT(T, Y);
   end; 
    begin
   c:=0;
  write(' Минимальные значения: ');
     Output(T);
     writeln;
     writeln(' Количество веток с минимальным значением: ', c);
      Depth(T);
      write(' Глубина вершины с минимальным значением: ',R);
    end;
  end.
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
18.07.2019, 18:36  [ТС]
как-то так
Миниатюры
Как сравнить между собой ветки бинарного дерева?  
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
18.07.2019, 19:08  [ТС]
я чё-то запутался, надо с нуля разобраться что к чему

Добавлено через 2 минуты
похоже там у тебя как раз то что нужно

Добавлено через 29 минут
СПАСИБО ОГРОМНОЕ!!!1 я и не знаю когда бы я это решил, у меня мозгов не хватает алгоритм придумывать...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.07.2019, 19:08
Помогаю со студенческими работами здесь

Сравнить между собой два одномерных массива поэлементно
сравнить между собой два одномерных массива поэлементно (т.е a-b, a-b) и передать в третий min элемент

Найти среднее значение массивов А[1..5], B[1..5] и сравнить их между собой. Вывести на экран большие из них
при составлении программы использовать подпрограммы :wall:

Найти среднее значение массивов и сравнить их между собой. Вывести на экран большее из них
Найти среднее значение массивов А, B и сравнить их между собой. Вывести на экран большие из них при составлении программы использовать...

Определить среднее арифметическое значение среди положительных и отрицательных чисел массива и сравнить их модули между собой
Здравствуйте.Задача была такая: введите с клавиатуры массив z(s),элементами которого являются положительные и отрицательные целые...

Массив: Найти их сумму и сумму чисел, разделенных на 2, сравнить эти суммы между собой.
Нужно написать программу используя одномерные массивы. Буду благодарен. Есть действительные числа X1, ..., X15. Найти их сумму и сумму...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru