Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- struct Node{
- long long int bro;
- long long int left_son;
- long long int parent;
- long long int val;
- Node(long long int val, long long int parent=-1) {
- this->val = val;
- this->parent = parent;
- bro = -1;
- left_son = -1;
- }
- };
- struct Tree{
- void insert(long long int val) {
- if (nodes.empty())
- insert(-1, -1, val);
- else
- insert(0, -1, val);
- }
- bool contains(long long int val) {
- if (nodes.empty())
- return false;
- return contains(0, val);
- }
- private:
- void insert(long long int index, long long int parent, long long int val) {
- if (index == -1) {
- nodes.push_back(new Node(val, parent));
- check_node(nodes.size() - 1);
- return;
- }
- if (val > nodes[index]->val) {
- insert(get_right_son(index), index, val);
- } else {
- insert(get_left_son(index), index, val);
- }
- }
- bool contains(long long int index, long long int val) {
- if (index == -1)
- return false;
- if (val == nodes[index]->val)
- return true;
- return contains(get_left_son(index), val) || contains(get_right_son(index), val);
- }
- void check_node(long long int index) {
- long long int parent = nodes[index]->parent;
- if (parent != -1)
- if (is_right(parent, nodes[index]->val)) {
- if (nodes[parent]->left_son != -1)
- nodes[nodes[parent]->left_son]->bro = index;
- } else {
- nodes[parent]->left_son = index;
- for (long long int i = parent + 1; i < nodes.size(); ++i) {
- if (i == index)
- continue;
- if (nodes[i]->parent == parent) {
- nodes[index]->bro = i;
- break;
- }
- }
- }
- }
- long long int get_left_son( long long int index) {
- return nodes[index]->left_son;
- }
- bool is_right(long long int parent_index, long long int val) {
- return nodes[parent_index]->val < val;
- }
- long long int get_right_son( long long int index) {
- if (nodes[index]->left_son != -1)
- return nodes[nodes[index]->left_son]->bro;
- for (long long int i = index + 1; i < nodes.size(); ++i) {
- if (nodes[i]->parent == index)
- return i;
- }
- return -1;
- }
- vector<Node*> nodes;
- };
- int main() {
- int a;
- cin >> a;
- Tree tree;
- for (int i = 0; i < a; ++i) {
- int t;
- cin >> t;
- tree.insert(t);
- }
- cout << "end";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement