# 13846 - Reconstruct swapped binary search trees
>author: Utin
###### tags: `binary tree`
---
## Brief
See the code below
## Solution 0
```c=
#include <stdio.h>
#include <stdlib.h>
typedef struct _node {
long long value;
struct _node* left, * right;
} Node;
Node* head = NULL;
Node* make_node(long long value);
void add_node(long long value, Node* ptr);
void print_tree_post(Node* ptr, int tail);
int main() {
long long input, N;
scanf("%lld", &N);
for (int i = 0; i < N; i++) {
scanf("%lld", &input);
add_node(input, head);
}
print_tree_post(head, 1);
}
Node* make_node(long long value) {
Node* new_node = (Node*) malloc(sizeof(Node));
new_node->value = value;
new_node->left = new_node->right = NULL;
return new_node;
}
void add_node(long long value, Node* ptr) {
if (!head) head = make_node(value);
else {
if (value <= ptr->value) {
if (ptr->left) add_node(value, ptr->left);
else ptr->left = make_node(value);
}
else {
if (ptr->right) add_node(value, ptr->right);
else ptr->right = make_node(value);
}
}
}
void print_tree_post(Node* ptr, int tail) {
if (ptr->left) print_tree_post(ptr->left, 0);
if (ptr->right) print_tree_post(ptr->right, 0);
printf("%lld", ptr->value);
tail ? printf("\n") : printf(" ");
}
// Utin
```
## Reference