Advertisement
mikymaione

Algo_20170628_2_1_Miky

Jul 8th, 2017
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.53 KB | None | 0 0
  1. public static int Algo_20170628_2_1(BST T, BST P = null)
  2. {
  3.     var flag = 0;
  4.     var ret = 0;
  5.  
  6.     if (T != null)
  7.     {
  8.         Console.WriteLine("Ispezionando {0}", T.key);
  9.  
  10.         if (T.key % 2 == 0)
  11.             flag = 1;
  12.  
  13.         var x = Algo_20170628_2_1(T.sx, T);
  14.         var y = Algo_20170628_2_1(T.dx, T);
  15.  
  16.         if (flag == 1 && P != null && x + y == 0)
  17.         {
  18.             if (P.sx == T)
  19.                 P.sx = Cancella(T);
  20.             else
  21.                 P.dx = Cancella(T);
  22.         }
  23.  
  24.         ret = x + y + flag;
  25.  
  26.         Console.WriteLine("Ispezionando {0}: {1}", T.key, ret);
  27.     }
  28.  
  29.     return ret;
  30. }
  31.  
  32. public static int Algo_20170628_2_1_Miky(BST Tree, BST Dad)
  33. {            
  34.     BST last = null;
  35.     BST T = Tree;
  36.     BST P = Dad;
  37.     var S = new Stack<BST>();
  38.  
  39.     var RS = new Stack<int>();
  40.     var RD = new Stack<int>();
  41.     var RF = new Stack<int>();
  42.  
  43.     var ret = 0;
  44.  
  45.     while (S.Count > 0 || T != null)
  46.         if (T != null)
  47.         {
  48.             Console.WriteLine("Ispezionando {0}", T.key);
  49.  
  50.             var flag = (T.key % 2 == 0 ? 1 : 0);
  51.  
  52.             RF.Push(flag);
  53.             RS.Push(0);
  54.             RD.Push(0);
  55.  
  56.             S.Push(T);
  57.             T = T.Sx;
  58.         }
  59.         else
  60.         {
  61.             T = S.Peek();
  62.  
  63.             if (T.Dx != null && T.Dx != last)
  64.             {
  65.                 T = T.Dx;
  66.             }
  67.             else
  68.             {
  69.                 S.Pop();
  70.                 last = T;
  71.  
  72.                 var x = RS.Pop();
  73.                 var y = RD.Pop();
  74.                 var flag = RF.Pop();
  75.  
  76.                 ret = x + y + flag;
  77.  
  78.                 if (T == Tree)
  79.                     P = Dad;
  80.                 else if (S.Count > 0)
  81.                 {
  82.                     P = S.Peek();
  83.  
  84.                     if (T == P.dx)
  85.                         RD.Push(ret + RD.Pop());
  86.                     else
  87.                         RS.Push(ret + RS.Pop());                            
  88.                 }
  89.                 else
  90.                     P = null;
  91.  
  92.                 if (flag == 1 && P != null && x + y == 0)
  93.                 {
  94.                     var temp = Cancella(T);
  95.  
  96.                     if (P.sx == T)
  97.                         P.sx = temp;
  98.                     else
  99.                         P.dx = temp;
  100.  
  101.                     last = temp;
  102.                 }                          
  103.  
  104.                 Console.WriteLine("Ispezionando {0}: {1}", T.key, ret);                      
  105.                 T = null;
  106.             }
  107.         }
  108.  
  109.     return ret;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement