Cod sursa(job #1990898)

Utilizator SagunistuStrimbu Alexandru Sagunistu Data 14 iunie 2017 03:24:26
Problema Hashuri Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.92 kb
#include <fstream>

using namespace std;

ifstream fin("hashuri.in");
ofstream fout("hashuri.out");

struct tree {
    int value;
    tree *left, *right;
};

tree *t;

void insertTree(int k) {
    tree *p = t;
    tree *q = t -> left;
    while(q != 0) {
        p = q;
        if (q -> value > k)
            q = q -> left;
        else
            q = q -> right;
    }
    tree *r = new tree;
    r -> left = 0;
    r -> right = 0;
    r -> value = k;
    if (p == t || p -> value > k) {

        p -> left = r;
    }
    else
        p -> right = r;
}

void deleteTree(int k) {
    tree *p = t;
    tree *q = t -> left;
    tree *r,*s;
    while (q != 0 && q -> value != k) {
        p = q;
        if (q -> value > k)
            q = q -> left;
        else
            q = q -> right;
    }
    if (q != 0) {
        if (q -> left == 0) {
            s = q -> left;

        }
        else {
            r = q;
            s = r -> left;
            while(s -> right) {
                r = s;
                s = s -> right;
            }
            r -> right = 0;
            s -> left = q -> left;
            s -> right = q -> right;
        }
         if (p -> left == q)
                p -> left = s;
            else
                p -> right = s;
        delete (q);
    }
}

int inTree(int k) {
    tree *q = t -> left;
    while (q != 0 && q -> value != k) {
        if (q -> value > k)
            q = q -> left;
        else
            q = q -> right;
    }
    if(q)
        return 1;
    return 0;
}

int main(){
    t = new tree;
    t -> left = 0;
    t -> right = 0;
    int op, i, n;
    fin >> n;
    for(int k = 0; k < n; k ++){
        fin >> op >> i;
        if (op == 1)
            insertTree(i);
        else
        if (op == 2)
            deleteTree(i);
        else
            fout <<  inTree(i) <<"\n";
    }
    return 0;
}