0 / 0 / 0
Регистрация: 12.11.2014
Сообщений: 9

Итеративная функция сравнения деревьев

26.05.2015, 06:57. Показов 3356. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание такое: Рекурсивно и итеративно описать логическую функцию, проверяющую на
равенство деревья Т1 и Т2.
Рекурсивная функция есть, но не знаю как сделать итеративно... Предлагают через стеки, но не понимаю как это осуществить. Прошу помочь, заранее благодарен.
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
112
113
114
#include <iostream>
#include <locale.h>
using namespace std;
 
//Наша структура
struct node
{
    int info; //Информационное поле
    node *l, *r;//Левая и Правая часть дерева
};
 
node * tree = NULL; //Объявляем переменную, тип которой структура Дерево
node * tree1 = NULL; //Объявляем переменную, тип которой структура Дерево
 
//ФУНКЦИЯ ЗАПИСИ ЭЛЕМЕНТА В БИНАРНОЕ ДЕРЕВО
void push(int a, node **t)
{
    if ((*t) == NULL) //Если дерева не существует
    {
        (*t) = new node; //Выделяем память
        (*t)->info = a; //Кладем в выделенное место аргумент a
        (*t)->l = (*t)->r = NULL; //Очищаем память для следующего роста
        return; //Заложили семечко, выходим
    }
    //Дерево есть
    if (a>(*t)->info) push(a, &(*t)->r); //Если аргумент а больше чем текущий элемент, кладем его вправо
    else push(a, &(*t)->l); //Иначе кладем его влево
}
 
//Функция сравнения двух деревьев
bool check(node *n1, node *n2)
{
    if (n1->info != n2->info || n1->l == NULL && n2->l != NULL || n1->l != NULL && n2->l == NULL || n1->r == NULL && n2->r != NULL || n1->r != NULL && n2->r == NULL)
    {
        return false;
    }
    if (n1->l == NULL && n1->r == NULL && n2->l == NULL && n2->r == NULL)
    {
        return true;
    }
    if (n1->l == NULL && n2->l == NULL && n1->r != NULL && n2->r != NULL)
    {
        return check(n1->r, n2->r);
    }
    if (n1->l != NULL && n2->l != NULL && n1->r == NULL && n2->r == NULL)
    {
        return check(n1->l, n2->l);
    }
    return (check(n1->l, n2->l) && check(n1->r, n2->r));
}
 
 
//ФУНКЦИЯ ОТОБРАЖЕНИЯ ДЕРЕВА НА ЭКРАНЕ
void print(node *t, int u)
{
    if (t == NULL) return; //Если дерево пустое, то отображать нечего, выходим
    else //Иначе
    {
        print(t->l, ++u);//С помощью рекурсивного посещаем левое поддерево
        for (int i = 0; i < u; ++i) cout << "|";
        cout << t->info << endl; //И показываем элемент
        u--;
    }
    print(t->r, ++u); //С помощью рекурсии посещаем правое поддерево
}
 
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    cout << "Программа сравнивающая 2 дерева.\n";
    int n; //Количество элементов
    int s; //Число, передаваемое в дерево
    cout << "введите количество элементов для первого дерева\n";
    cin >> n; //Вводим количество элементов
 
    for (int i = 0; i < n; ++i)
    {
        cout << "ведите число\n";
        cin >> s; //Считываем элемент за элементом
 
        push(s, &tree); //И каждый кладем в дерево
    }
    cout << "ваше дерево\n";
    print(tree, 0);
 
    int n1; //Количество элементов
    int s1; //Число, передаваемое в дерево
    cout << "введите количество элементов для второго дерева\n";
    cin >> n1; //Вводим количество элементов
 
    for (int i = 0; i < n1; ++i)
    {
        cout << "ведите число\n";
        cin >> s1; //Считываем элемент за элементом
 
        push(s1, &tree1); //И каждый кладем в дерево
    }
    cout << "ваше дерево\n";
    print(tree1, 0);
 
 
    //  Проверка на идентичность
    if (check(tree, tree1))
    {
        cout << "Деревья одинаковы" << endl;
    }
    else
    {
        cout << "Деревья различны" << endl;
    }
    getchar(); getchar();
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.05.2015, 06:57
Ответы с готовыми решениями:

Рекурсивная и итеративная функция, приближающаяся к arccos x
F(x) = Pi/2-(x+(x^3/2*3)+(1*3*x^5/2*4*5)+(1*3*5*x^7/2*4*6*7)+K) Функция приближается к arccos x и модуль x &lt; 1 Рекурсивная и...

Будет ли итеративная функция значительно быстрее рекурсивной?
Вопрос не по коду. Вот есть у меня рекурсивная функция, глубина рекурсии достигает 10 в среднем. Эта функция вызывается огромное (порядка...

Массив: Учащиеся участвовали в посадке деревьев. Сколько деревьев было посажено
1)Учащиеся 8-х классов участвовали в посадке деревьев. 8-а посадил 100 деревьев, 8-б —122 дерева, 8-в — 98 деревьев, 8-г — 104 дерева, 8-д...

1
0 / 0 / 0
Регистрация: 12.11.2014
Сообщений: 9
01.06.2015, 21:32  [ТС]
Вопрос актуален, прошу помочь пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.06.2015, 21:32
Помогаю со студенческими работами здесь

Функция сравнения площади
Сравнить площади колец, внутренние радиусы которых равны г1, r2, а внешний — заданному числу R (R &gt; r1 и R&gt;r2).

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

Функция для сравнения файлов
Даны два текстовый файла, состоящие из некоторого количества строк. Написать функцию для сравнения этих файлов. Помогите пожалуйста

Функция сравнения двух чисел
Проверьте кто-нибудь код пожалуйста. Задача : Написать программу, выводящую на экран результат сравнения двух чисел в виде: A=10 B=5:...

Функция сравнения двух строк
Есть задание написать функцию в c++, которая работает также как strcmp(). Вот мой код: #include &lt;iostream&gt; using namespace...


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

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

Новые блоги и статьи
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
Создание нейросети с PyTorch
AI_Generated 19.06.2025
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это. . .
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru