Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
#1

Опредилить, являются ли два дерева зеркально подобнымм - C++

14.09.2010, 23:14. Просмотров 761. Ответов 4
Метки нет (Все метки)

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

Подскажите алгоритм, потому как вообще никогда не имел дело с деревьями, или литературу чтоб разобраться. Заранее благодарен!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2010, 23:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Опредилить, являются ли два дерева зеркально подобнымм (C++):

Являются ли два массивы похожими? - C++
Заданы два массива чисел, написать программу, проверяющую, являются ли эти массивы похожими(совпадают множества чисел, встречающихся в...

Проверить на эквивалентность два AVL-дерева - C++
Такое вот задание: проверить на эквивалентность два АВЛ-дерева. Если они не являются информационно эквивалентными, указать минимальное по...

Определить, являются ли два заданных числа дружными - C++
Написать программу, которая определит, являются ли два заданных числа дружными. Будем называть два числа дружными, если они состоят из...

Определить, являются ли два заданных слова анаграммами - C++
Не требую полного кода. Я просто хочу понять, как ее решить. Просто алгоритм. * Слова, составленные из одних и тех же букв, называются...

Заданы два человека – p и q. Ответить, являются ли они родственниками - C++
Заданы два человека – p и q. Ответить, являются ли они родственниками. Заданы n человек и два массива натуральных чисел mother и...

Ввести с клавиатуры два слова. Проверить, являются ли они анаграммами - C++
Ввести с клавиатуры два слова. Проверить, являются ли они анаграммами, то есть возможно ли из всех букв одного слова составить другое....

4
asics
Freelance
Эксперт С++
2847 / 1782 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
14.09.2010, 23:54 #2
Посмтори,может пригодитсо.
0
Вложения
Тип файла: rar Деревья.rar (3.7 Кб, 31 просмотров)
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
15.09.2010, 10:10  [ТС] #3
Может у кого еще есть какая инфа?

Добавлено через 9 часов 39 минут
Неужели никто не имел дело с деревьями?
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
15.09.2010, 11:39 #4
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
///////////////////////////////////////////////////////////////////////////////////
//  Есть такое задание: Два бинарных дерева дзеркально подобные, 
//  если либо оба они пустые, либо оба не пустые, и при етом левое поддерево 
//  одного с них подобное правому поддереву другого, и наоборот. 
//  Опредилить, есть ли два дерева дзеркально подобними.
///////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <vector>
 
typedef std::vector<int>  T_inums;
///////////////////////////////////////////////////////////////////////////////////
struct T_node
{
    int      data;
    T_node*  left;
    T_node*  right;
};
///////////////////////////////////////////////////////////////////////////////////
void make_node(T_node*& rp_node, int val)
{
    rp_node         = new T_node;
    rp_node->data   = val;
    rp_node->left   = 0;
    rp_node->right  = 0;
}
///////////////////////////////////////////////////////////////////////////////////
void sort_insert(T_node*& rp_tree, int val)
{   
    if(rp_tree == 0)
    {
        make_node(rp_tree, val);        
    }
    else if(val < rp_tree->data)
    {        
        sort_insert(rp_tree->left, val);
    }
    else
    {
        sort_insert(rp_tree->right, val);
    }
}
///////////////////////////////////////////////////////////////////////////////////
void sort_insert(T_node*&  rp_tree, T_inums  inums)
{
    for(T_inums::const_iterator  it = inums.begin(); it != inums.end(); ++it)
    {
        sort_insert(rp_tree, *it);
    }
}
///////////////////////////////////////////////////////////////////////////////////
void reverse_sort_insert(T_node*&  rp_tree, int val)
{
    if(rp_tree == 0)
    {
        make_node(rp_tree, val);        
    }
    else if(val < rp_tree->data)
    {
        reverse_sort_insert(rp_tree->right, val);
    }
    else
    {
        reverse_sort_insert(rp_tree->left, val);
    }
}
///////////////////////////////////////////////////////////////////////////////////
void reverse_sort_insert(T_node*&  rp_tree, T_inums  inums)
{
    for(T_inums::const_iterator  it = inums.begin(); it != inums.end(); ++it)
    {
        reverse_sort_insert(rp_tree, *it);
    }
}
///////////////////////////////////////////////////////////////////////////////////
bool are_specularly_similar(T_node*  p_treeA, T_node*  p_treeB)
{
    if(p_treeA == 0 && p_treeB == 0)
    {
        return true;
    }
    if(p_treeA == 0 || p_treeB == 0)
    {
        return false;
    }
    if(p_treeA->data != p_treeB->data)
    {
        return false;
    }
    return    are_specularly_similar(p_treeA->left, p_treeB->right)
           && are_specularly_similar(p_treeA->right, p_treeB->left);
 
}
///////////////////////////////////////////////////////////////////////////////////
int main()
{    
    T_inums  inums;
    inums.push_back(2);
    inums.push_back(7);
    inums.push_back(1);
    inums.push_back(8);
    inums.push_back(2);
        
    T_node*  p_tree_l = 0;
    sort_insert(p_tree_l, inums);
    
    T_node*  p_tree_r = 0;
    reverse_sort_insert(p_tree_r, inums);
 
    if(are_specularly_similar(p_tree_l, p_tree_r))    
    {
        std::cout << "Are specularly similar tree_l and tree_r.";
    }
    else
    {
        std::cout << "Are NOT specularly similar tree_l and tree_r.";
    }
 
    std::cout << std::endl;
 
    if(are_specularly_similar(p_tree_l, p_tree_l))    
    {
        std::cout << "Are specularly similar tree_l and tree_l.";
    }
    else
    {
        std::cout << "Are NOT specularly similar tree_l and tree_l.";
    }
 
    std::cout << std::endl;
    return 0;
}
2
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
15.09.2010, 22:03  [ТС] #5
Спасибо, но если вас не затруднит, дайте несколько коментарий!!!

Добавлено через 9 часов 21 минуту
Может кто посоветует литературу по даной теме для чайника?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2010, 22:03
Привет! Вот еще темы с ответами:

Проверить истинность высказывания: «Ровно два из чисел A, B, C являются положительными» - C++
Даны три целых числа: A, B, C. Проверить истинность высказывания: «Ровно два из чисел A, B, C являются положительными».

Определить, являются ли два заданных натуральных числа взаимно простыми - C++
Здраствуйте помогите пожалуйста написать программу :Для двух натуральных чисел P и Q &lt;1000000 напишите программу, которая определяет,...

Определить, являются ли данные два натуральных числа взаимно простыми - C++
Определите, являются ли данные два натуральных числа взаимно простыми. Составьте функцию, которая проверяла бы, являются ли три числа...

Рекурсивно и нерекурсивно описать логическую функцию, проверяющую на равенство два бинарных дерева - C++
страшно каюсь, не подумайте что я ленивый тюлень и мне не хочется вникать в тему, обычно я никогда так не делала, но у меня не осталось...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
15.09.2010, 22:03
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru