Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // #include <howarto>
- #include <iostream>
- #include "Arbre.hh"
- #include "ArbIOint.hh"
- using namespace std;
- /* Pre: a = A, A no és buit. */
- /* Post: "a" és un arbre_suma amb la mateixa estructura que A, però en aquells llocs on hi ha un node amb l'arrel
- * igual a la marca es deixa de tractar i com a resultat, quan tot acaba, tenen la mateixa arrel que al principi,
- * és a dir, no s'ha substituit el seu valor per la suma dels seus fills.*/
- void arbre_suma_despreciativa(Arbre<int> &a, int &sum, int marca) {
- Arbre<int> a1, a2;
- a.fills(a1, a2);
- if (a1.es_buit() and a2.es_buit()) {
- sum = 0;
- a.plantar(0, a1, a2);
- }
- else if (a1.es_buit()) {
- int arrel = a2.arrel();
- int sum2;
- if (arrel != marca) {
- arbre_suma_despreciativa(a2, sum2, marca);
- sum = arrel + sum2;
- }
- else sum = 0;
- a.plantar(sum, a1, a2);
- }
- else if (a2.es_buit()) {
- int arrel = a1.arrel();
- int sum1;
- if (arrel != marca) {
- arbre_suma_despreciativa(a1, sum1, marca);
- sum = arrel + sum1;
- }
- else sum = 0;
- a.plantar(sum, a1, a2);
- }
- else {
- int sum1, sum2;
- int arrel1, arrel2;
- arrel1 = a1.arrel();
- arrel2 = a2.arrel();
- if (arrel1 != marca) {
- arbre_suma_despreciativa(a1, sum1, marca);
- sum = arrel1 + sum1;
- }
- if (arrel2 != marca) {
- arbre_suma_despreciativa(a2, sum2, marca);
- if (arrel1 != marca) sum += arrel2 + sum2;
- else sum = arrel2 + sum2;
- }
- a.plantar(sum, a1, a2);
- }
- }
- int main() {
- Arbre<int> a;
- llegir_arbre_int(a, 0);
- cout << "LISTO" << endl;
- int sum;
- int marca;
- cin >> marca;
- if (not a.es_buit()) {
- arbre_suma_despreciativa(a, sum, marca);
- escriure_arbre_int(a);
- }
- else cout << "El árbol no puede ser vacío" << endl;
- }
- /*
- 6
- / \
- 5 7
- / \ / \
- 4 3 8 9
- |
- V
- 24
- / \
- 5 17
- / \ / \
- 4 3 0 0
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement