Бинарное дерево
Добрый вечер!
Задание: составить программу на Си для построения и обработки двоичного дерева, содержащего узлы типа double. После того как дерево создано, его обработка должна производиться в режиме текстового меню со след. действиями:
1)текстовая визуализация
2)добавление нового узла
3)удаление узла(с перестроением)
4*)проверка является ли дерево самоподобным(подобным своему отражению)
Вот мой код. текстовая визуализация работает в любом варианте, и, если без текстового меню, то работает и все остальное, но как только запихиваю в меню, все перестает работать(( помогите, пожалуйста!
Добрый вечер!
Задание: составить программу на Си для построения и обработки двоичного дерева, содержащего узлы типа double. После того как дерево создано, его обработка должна производиться в режиме текстового меню со след. действиями:
1)текстовая визуализация
2)добавление нового узла
3)удаление узла(с перестроением)
4*)проверка является ли дерево самоподобным(подобным своему отражению)
Вот мой код. текстовая визуализация работает в любом варианте, и, если без текстового меню, то работает и все остальное, но как только запихиваю в меню, все перестает работать(( помогите, пожалуйста!
Код:
#include <stdio.h>
#include <queue>
//#define NULL 0
class TreeNode;
//void print(double ident);
void work();
class TreeNode
{
private:
TreeNode* left;
TreeNode* right;
double value;
public:
TreeNode(double a_value)//constructor
{
left = NULL;
right = NULL;
value = a_value;
}
~TreeNode()//distructor
{
if (hasLeft())
delete left;
if (hasRight())
delete right;
}
void add(double a_value)//adding new element
{
if (a_value < value)
{
if (left == NULL)
{
left = new TreeNode(a_value);
return;
}
left->add(a_value);
return;
}
if (right == NULL)
{
right = new TreeNode(a_value);
return;
}
right->add(a_value);
//work();
}
void printSorted()//printing
{
printf("%d\n ", value);
if (left != NULL)
{
left->printSorted();
}
if (right != NULL)
{
right->printSorted();
}
}
///////////////////////
void comparing()
{
if(&left == &right)
{
printf("Yes");
}
else printf("No");
}
///////////////////////
void print(int ident)//printing with displacement
{
for (int i=0; i<ident; i++)
{
printf(" ");
}
printf("%.2f\n", value);
if (left != NULL)
{
left->print(ident + 1);
}
if (right != NULL)
{
right->print(ident + 1);
}
//work();
}
TreeNode* getLeft()
{
return left;
}
bool hasLeft()
{
return left != NULL;
}
TreeNode* getRight()
{
return right;
}
bool hasRight()
{
return right != NULL;
}
int getValue()
{
return value;
}
void remove(double a_value)
{
removeInternal(a_value);
//work();
}
TreeNode* removeInternal(double a_value)
{
if (a_value < value)
{
if (hasLeft())
left = left->removeInternal(a_value);
return this;
}
if (a_value > value)
{
if (hasRight())
right = right->removeInternal(a_value);
return this;
}
if (!hasLeft() && !hasRight())
{
return NULL;
}
if (!hasLeft())
{
return right;
}
if (!hasRight())
{
return left;
}
TreeNode* i = right;
while(i->hasLeft())
{
i = i->left;
}
i->left = left;
return right;
//work();
}
};
void work()
{
//void print(double ident);
TreeNode* tree = new TreeNode(9.1);
tree->add(44.88);
tree->add(0.8);
tree->add(-7.9);
tree->add(10.9);
tree->add(6.0);
int n;
while(true)
{
//TreeNode* tree = new TreeNode(9.1);
printf("\n\nprint 1 for showing tree\n");
printf("print 2 for adding element\n");
printf("print 3 for removing element\n");
printf("print 0 for quit\n");
scanf("%d", &n);
//printf("\"%c\"\n",n);
if(n==0)
{
break;
}
if(n==1)
{
//printf("Y");
//TreeNode* tree;
tree->print(0);
//work();
//return;
}
if(n==2)
{
double e;
printf("print new element\n");
scanf("%.2f", &e);
printf("%.2f", &e);
tree->add(e);
}
if(n==3)
{
double e;
printf("print element for remove\n");
scanf("%.2f", &e);
tree->remove(e);
}
}
}
int main()
{
/*TreeNode* tree = new TreeNode(9.1);
tree->add(44.88);
tree->add(0.8);
tree->add(-7.9);
tree->add(10.9);
tree->add(6.0);*/
//scanf("%.2f", &e);
//tree->add(&e);
//tree->add(45.54);
//tree->add(3);
//tree->add(30);
//tree->add(33);
//comparing();
//tree->remove(0);
//tree->printSorted();
//tree->print(0);
//tree->comparing();
work();
//printf("\n\n");
return 0;
}