Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 3
Регистрация: 14.02.2013
Сообщений: 77
1

О деревьях

03.09.2013, 15:36. Показов 1115. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В пылу сессии при выполнении кучи контрольных, натолкнулся на стену под названием "дерево бинарное".

Задание требует: разработать программу, которая определяет, равны ли два бинарных дерева.

Уже второй час копаюсь в интернетах пытаясь хоть что-то об этом найти, в часности о формировании бинарного дерева.

Есть у кого-нибудь заготовка для создания бинарных деревьев и их сравнения?

Отчаялся уже.

Из найденного:
Pascal
1
2
3
4
5
6
7
8
9
{функция сравнения бинарных деревьев}
function equal(p1, p2 : ptr) : boolean;
begin
    if (p1=nil) and (p2=nil) then equal := true
    else if (p1<>nil) and (p2<>nil) 
        then equal := (p1^.info= p2^.info) and equal(p1^.llink, p2^.llink) 
                      and equal(p1^.rlink, p2^.rlink)
    else equal := false
end;
осталось только разобраться как же их всё-таки собирать эти бинарные деревья.

Пожалуйста помогите
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.09.2013, 15:36
Ответы с готовыми решениями:

массив в бинарных деревьях
есть дерево, его листья содержат элементы массива * ...

Еще раз о Деревьях
И снова таже проблемма - построение древовидных структур по запросу к SQL базе Тавлица: ID| ROOT|...

Как переносить узлы в деревьях
Всем добрый день. Подскажите как сделать или дайте ссылку на литературу буду благодарен. 1.Как...

Ассоциативный массив на префиксных деревьях
Подскажите, существует ли контейнер или готовый класс, типа map, но основанный на префиксных...

7
Почетный модератор
 Аватар для Puporev
64305 / 47602 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
03.09.2013, 15:44 2
Вот здесь создание и сравнение бинарных деревьев, правда ввод из файла.
Сравнение двух бинарных деревьев
0
1 / 1 / 3
Регистрация: 14.02.2013
Сообщений: 77
03.09.2013, 15:48  [ТС] 3
Я уже пробовал этот код
компилятор ругается на 63-ей строке (пишет: ожидалась переменная)

Pascal
1
T := New(Tree);
0
Почетный модератор
 Аватар для Puporev
64305 / 47602 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
03.09.2013, 15:51 4
Замени эту строку на
Pascal
1
New(T);// := New(Tree);
0
1 / 1 / 3
Регистрация: 14.02.2013
Сообщений: 77
03.09.2013, 16:27  [ТС] 5
Итого что-то пе то получается:

имеем два файла tree1 и tree2
в tree1 текст: "121212122"
в tree2 текст: "0110101"

Программа при выполненяется и вот что пишет:

Первое дерево:
0 0
Второе дерево:
0 0

деревья равны
0
Почетный модератор
 Аватар для Puporev
64305 / 47602 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
03.09.2013, 16:28 6
у меня так же, что бы не писал в файле... Нр я в этом не разбираюсь.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33049 / 21349 / 8205
Регистрация: 22.10.2011
Сообщений: 36,660
Записей в блоге: 9
03.09.2013, 18:25 7
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Garrus_En, смотри:
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
type
    T = Integer;    { скрываем зависимость от конкретного типа данных }
 
    TTree = ^TNode;
    TNode = record
        value: T;
        Left, Right: TTree;
    end;
    
procedure Insert(var Root: TTree; X: T);
 
    { Дополнительная процедура, создающая и инициализирующая новый узел }
    procedure CreateNode(var p: TTree; n: T);
    begin
        New(p);
        p^.value := n;
        p^.Left := nil;
        p^.Right := nil
    end;
    
begin
    if Root = nil Then CreateNode(Root, X) { создаем новый узел дерева }
    else 
        with Root^ do begin
            if value < X then Insert(Right, X)
            else
                if value > X Then Insert(Left, X)
                else 
                { Действия, производимые в случае повторного
                внесения элементов в дерево}
        end;
end;
 
procedure PrintDown(level: integer; Root: TTree);
begin
    if Root = nil then exit;
    with Root^ do
   begin
        Writeln('':2*level, value);
        PrintDown(level + 1, Left);
        PrintDown(level + 1, Right)
    end
end;
 
function equal(p1, p2 : TTree) : boolean;
begin
  if (p1 = nil) and (p2 = nil) then equal := true
  else if (p1 <> nil) and (p2 <> nil)
  then equal := (p1^.Value = p2^.Value) and equal(p1^.Left, p2^.Left) 
                and equal(p1^.Right, p2^.Right)
  else equal := false
end;
 
var
   first_arr : array[1 .. 7] of integer := (20, 7, 4, 16, 38, 37, 43);
   second_arr : array[1 .. 3] of integer := (38, 37, 43);
   T1, T2 : TTree;
   
begin
  // Заполняем оба дерева данными из массива
  for var i := 1 to 7 do Insert(T1, first_arr[i]);
  PrintDown(0, T1);
  for var i := 1 to 3 do Insert(T2, second_arr[i]);
  PrintDown(0, T2);
  
  // и проверяем на равенство правую ветку первого дерева и всё второе дерево...
  writeln(equal(T1^.Right, T2)); // True
 
  // а теперь - левую ветку первого дерева сравниваем со вторым. Они не равны...
  writeln(equal(T1^.Left, T2)); // False
end.
1
1 / 1 / 3
Регистрация: 14.02.2013
Сообщений: 77
03.09.2013, 19:48  [ТС] 8
Ух как Спасибо большое.

А если ввести массивы через генератор случайных чисел, включающий также случайный выбор количества элементов первого и второго множества, я получу то что мне надо?

Хотя программа итак выполняет то что от неё требуется
0
03.09.2013, 19:48
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.09.2013, 19:48
Помогаю со студенческими работами здесь

где моду прочитать о деревьях с нуля?
где моду прочитать о деревьях с нуля?

Зачем цвет в красно-чёрных деревьях?
Читал многое о красно-чёрных деревьях. Понял многое кроме одного: везде пишется что...

Создать файл, элементами которого являются сведения о деревьях
Создать файл, элементами которого являются сведения о деревьях: наименование, место...

Плотное расписание, поиск на авл-деревьях, хэш-поиск
1. Задача о плотном расписании 2. Поиск на АВЛ-деревьях 3. ХЭШ-поиск нужна помощь в...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Создание макробота, как способа экономии времени и варианта ИИ.
Hrethgir 28.01.2025
Чисто теоретически, создание ИИ на ПК можно разделить на части. Создать бота отвечающего за железо (эмулирование вкл, выкл, мышь, клавиатура), другой бот осуществляет распознавание изображений,. . .
[Golang] 121. Best Time to Buy and Sell Stock
alhaos 28.01.2025
В этой задаче мы получаем слайс целых чисел, которые означают цену акции в разные моменты времени, и должны вернуть максимально возможную прибыль от купли продажи акции. / / . . .
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru