Pagini recente » Cod sursa (job #676862) | Borderou de evaluare (job #2019917) | Cod sursa (job #2377406) | Cod sursa (job #2142713) | Cod sursa (job #1528815)
#include <algorithm>
#include <cstdio>
using namespace std;
const int MAX_N = 500002;
struct Tree {
int value, cnt;
Tree *leftSon, *rightSon;
Tree() {
value = 0;
cnt = 0;
leftSon = NULL;
rightSon = NULL;
}
};
void insertElement(Tree *node, int x) {
if(node->value == x) {
node->cnt++;
return;
}
else if(node->value == 0) {
node->value = x;
node->cnt = 1;
return;
}
else if(node->value > x) {
if(node->leftSon == NULL) {
node->leftSon = new Tree;
}
insertElement(node->leftSon, x);
}
else {
if(node->rightSon == NULL) {
node->rightSon = new Tree;
}
insertElement(node->rightSon, x);
}
}
bool searchElement(Tree *node, int x) {
if(node == NULL) {
return false;
}
if(node->value == x) {
return true;
}
else if(node->value > x) {
return searchElement(node->leftSon, x);
}
else {
return searchElement(node->rightSon, x);
}
}
void printTree(Tree *node) {
if(node == NULL) {
return;
}
printTree(node->leftSon);
for(int i = 0; i < node->cnt; ++i) {
printf("%d ", node->value);
}
printTree(node->rightSon);
}
int main()
{
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
Tree *root = new Tree;
int n;
scanf("%d", &n);
int v[MAX_N];
for(int i = 0; i < n; ++i) {
scanf("%d", &v[i]);
}
random_shuffle(v, v + n);
for(int i = 0; i < n; ++i) {
insertElement(root, v[i]);
}
printTree(root);
printf("\n");
fclose(stdin);
fclose(stdout);
return 0;
}