summaryrefslogtreecommitdiffstats
path: root/2022-2/L10/mitsuo/Arbol.cpp
blob: 4cb1ccb490e31ebe456697ef8d295bd03b22c35b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/* 
 * File:   Arbol.cpp
 * Author: mitsuo
 * 
 * Created on 02 December 2022, 12:40
 */

#include <iostream>
#include <iomanip>
#include "Arbol.h"

using namespace std;

Arbol::Arbol() {
    this->raiz = nullptr;
}

Arbol::Arbol(const Arbol& orig) {
}

Arbol::~Arbol() {
}


void Arbol::insert(Medicamento * m) {
    Nodo * nodo = new Nodo;
    Nodo ** walk = &this->raiz;

    nodo->med = m;
    
    while (*walk) {
        if (m->getCodigo() < (*walk)->med->getCodigo()) {
            walk = &(*walk)->izq;
        } else {
            walk = &(*walk)->der;
        }
    }
    *walk = nodo;
}

void Arbol::print(std::ostream &output) {
    this->print_rec(this->raiz, output);
}

void Arbol::print_rec(Nodo * nodo, std::ostream &output) {
    /* in order */
    if (!nodo) {
        return;
    }
    this->print_rec(nodo->izq, output);
    nodo->med->imprime(output);
    this->print_rec(nodo->der, output);
}


void Arbol::actualiza(std::istream &input) {
    this->actualiza_rec(this->raiz, input);
}

void Arbol::actualiza_rec(Nodo * nodo, std::istream &input) {
    /* in order */
    if (!nodo) {
        return;
    }
    this->actualiza_rec(nodo->izq, input);
    nodo->med->actualiza(input);
    this->actualiza_rec(nodo->der, input);
}