Бинарные деревья. Проверка на зеркальность
Добавлено: 15 мар 2017, 13:34
Доброго времени суток. Нужна срочная помощь с лабой, но в деревьях не разбираюсь. Создать два дерева и проверить является ли их структуры зеркальными друг другу...Я нашел программу которая сравнивает элементы деревьев, подскажите как переделать очень надо)
Код: Выделить всё
#include <iostream>
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)
{
return n1&&n2?n1->info==n2->info&&check(n1->l,n2->l)&&check(n1->r,n2->r):!n1&&!n2;
}
//ФУНКЦИЯ ОТОБРАЖЕНИЯ ДЕРЕВА НА ЭКРАНЕ
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(0, "rus");
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;
}
system("pause");
return 0;
}