#include "stdafx.h"
#include <iostream>
using namespace std;
const int N = 2;
struct tree
{
int field[N];
tree *left;
tree *middle;
tree *right;
};
void sort(int fd[N])
{
int count;
do
{
count = 0;
for (int i = 0; fd[i + 1] != INT_MIN && i<N - 1; i++)
if (fd[i]>fd[i + 1])
{
swap(fd[i], fd[i + 1]);
count++;
}
} while (count != 0);
}
tree *input(tree *head, int number)
{
int i;
if (head == NULL)
{
head = new tree;
head->field[0] = number;
for (i = 1; i < N; i++)
head->field[i] = INT_MIN;
head->left = NULL;
head->middle = NULL;
head->right = NULL;
}
else
{
for (i = 0; head->field[i] != INT_MIN && i<N; i++);
if (i != N)
{
head->field[i] = number;
sort(head->field);
}
else
{
if (number <= head->field[0])
{
head->left = input(head->left, number);
}
else if (number >= head->field[N - 1])
{
head->right = input(head->right, number);
}
else if ((number >= head->field[0]) && (number <= head->field[N - 1]))
{
head->middle = input(head->middle, number);
}
/*if (number >= head->field[0] && number <= head->field[N - 1])
{
int c = head->field[N - 1];
head->field[N - 1] = number;
sort(head->field);
head->right = input(head->right, c);
return head;
}
else
{
if (number < head->field[0])
head->left = input(head->left, number);
else
head->right = input(head->right, number);
}*/
}
}
return head;
}
void show(tree *head, int lvl)
{
int i;
if (head != NULL)
{
for (i = 0; i < lvl; i++)
cout << " ";
for (int i = 0; i < N && head->field[i] != INT_MIN; i++)
{
cout << head->field[i] << " ";
}
cout << endl;
if (head->left != NULL) cout << "(l) ";
show(head->left, lvl + 1);
if (head->middle != NULL) cout << "(m) ";
show(head->middle, lvl + 1);
if (head->right != NULL) cout << "(r) ";
show(head->right, lvl + 1);
}
}
void free(tree *head)
{
if (head != NULL)
{
free(head->left);
free(head->middle);
free(head->right);
delete head;
}
}
void main()
{
system("chcp 1251");
system("cls");
tree *head = NULL;
int number = -1;
int x;
while (number != 0)
{
cout << "Введите 1, чтобы добавить число" << endl;
cout << "Введите 2, чтобы вывести дерево" << endl;
cout << "Введите 0, чтобы закончить работу" << endl;
cin >> number;
switch (number)
{
case 1:
{
cout << "Введите число" << endl;
cin >> x;
head = input(head, x);
break;
}
case 2:
{
show(head, 0);
break;
}
case 0:
{
free(head);
break;
}
default:
break;
}
}
}