Advertisement
howarto

Ej propio: arbre_suma_despreciativa

Apr 30th, 2015
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.18 KB | None | 0 0
  1. // #include <howarto>
  2. #include <iostream>
  3. #include "Arbre.hh"
  4. #include "ArbIOint.hh"
  5.  
  6. using namespace std;
  7.  
  8. /* Pre: a = A, A no és buit. */
  9. /* Post: "a" és un arbre_suma amb la mateixa estructura que A, però en aquells llocs on hi ha un node amb l'arrel
  10.  * igual a la marca es deixa de tractar i com a resultat, quan tot acaba, tenen la mateixa arrel que al principi,
  11.  * és a dir, no s'ha substituit el seu valor per la suma dels seus fills.*/
  12. void arbre_suma_despreciativa(Arbre<int> &a, int &sum, int marca) {
  13.     Arbre<int> a1, a2;
  14.     a.fills(a1, a2);
  15.     if (a1.es_buit() and a2.es_buit()) {
  16.         sum = 0;
  17.         a.plantar(0, a1, a2);
  18.     }
  19.     else if (a1.es_buit()) {
  20.         int arrel = a2.arrel();
  21.         int sum2;
  22.         if (arrel != marca) {
  23.             arbre_suma_despreciativa(a2, sum2, marca);
  24.             sum = arrel + sum2;
  25.         }
  26.         else sum = 0;
  27.         a.plantar(sum, a1, a2);
  28.     }
  29.     else if (a2.es_buit()) {
  30.         int arrel = a1.arrel();
  31.         int sum1;
  32.         if (arrel != marca) {
  33.             arbre_suma_despreciativa(a1, sum1, marca);
  34.             sum = arrel + sum1;
  35.         }
  36.         else sum = 0;
  37.         a.plantar(sum, a1, a2);
  38.     }
  39.     else {
  40.  
  41.         int sum1, sum2;
  42.         int arrel1, arrel2;
  43.         arrel1 = a1.arrel();
  44.         arrel2 = a2.arrel();
  45.         if (arrel1 != marca) {
  46.             arbre_suma_despreciativa(a1, sum1, marca);
  47.             sum = arrel1 + sum1;
  48.         }
  49.  
  50.         if (arrel2 != marca) {
  51.             arbre_suma_despreciativa(a2, sum2, marca);
  52.             if (arrel1 != marca) sum += arrel2 + sum2;
  53.             else sum = arrel2 + sum2;
  54.         }
  55.  
  56.         a.plantar(sum, a1, a2);
  57.  
  58.     }
  59. }
  60.  
  61. int main() {
  62.     Arbre<int> a;
  63.     llegir_arbre_int(a, 0);
  64.     cout << "LISTO" << endl;
  65.     int sum;
  66.     int marca;
  67.     cin >> marca;
  68.  
  69.     if (not a.es_buit()) {
  70.         arbre_suma_despreciativa(a, sum, marca);
  71.         escriure_arbre_int(a);
  72.     }
  73.     else cout << "El árbol no puede ser vacío" << endl;
  74.  
  75. }
  76.  
  77.  
  78. /*
  79.  
  80.     6
  81.      /     \
  82.     5       7    
  83.   /   \   /   \
  84.  4     3 8     9
  85.  
  86.     |
  87.     V
  88.  
  89.     24
  90.       /    \
  91.      5      17
  92.    /   \   /  \
  93.   4     3 0    0  
  94.  
  95.  
  96.  
  97.  
  98. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement