Advertisement
mikymaione

Algo_20171016

Dec 9th, 2017
492
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.00 KB | None | 0 0
  1. public static BST Algo_20171016(BST T, int a, int b)
  2. {
  3.     if (T != null)
  4.     {
  5.         Console.WriteLine($"T: {T.key}, a: {a}, b: {b}");
  6.  
  7.         if (T.key >= a && T.key <= b)
  8.         {
  9.             T.sx = Algo_20171016(T.sx, a, T.key);
  10.             T.dx = Algo_20171016(T.dx, T.key, b);
  11.         }
  12.         else
  13.         {
  14.             Cancella(T);
  15.             T = null;
  16.         }
  17.     }
  18.  
  19.     return T;
  20. }
  21.  
  22. public static BST Algo_20171016_Miky(BST T, int a, int b)
  23. {
  24.     BST last = null;
  25.     BST next = null;
  26.     BST curr = T;
  27.     var S = new Stack<BST>();
  28.  
  29.     var Sa = new Stack<int>();
  30.     var Sb = new Stack<int>();
  31.  
  32.     while (S.Count > 0 || curr != null)
  33.     {
  34.         if (curr != null)
  35.         {
  36.             S.Push(curr);
  37.             Sa.Push(a);
  38.             Sb.Push(b);
  39.  
  40.             Console.WriteLine($"T: {curr.key}, a: {a}, b: {b}");
  41.  
  42.             if (curr.key >= a && curr.key <= b)
  43.             {
  44.                 next = curr.Sx;
  45.                 b = curr.key;
  46.             }
  47.             else
  48.             {
  49.                 var sono_sinistro = curr.Equals(last.sx);
  50.  
  51.                 Cancella(curr);
  52.                 curr = null;
  53.                 next = null;
  54.                 S.Pop();
  55.                 Sa.Pop();
  56.                 Sb.Pop();
  57.  
  58.                 if (sono_sinistro)
  59.                     last.sx = null;
  60.                 else
  61.                     last.dx = null;
  62.             }
  63.         }
  64.         else
  65.         {
  66.             curr = S.Peek();
  67.             a = Sa.Peek();
  68.             b = Sb.Peek();
  69.  
  70.             if (curr.Dx != null && curr.Dx != last)
  71.             {
  72.                 if (curr.key >= a && curr.key <= b)
  73.                 {
  74.                     next = curr.Dx;
  75.                     a = curr.key;
  76.                 }
  77.             }
  78.             else
  79.             {
  80.                 next = null;
  81.                 S.Pop();
  82.                 Sa.Pop();
  83.                 Sb.Pop();
  84.             }
  85.         }
  86.  
  87.         last = curr;
  88.         curr = next;
  89.     }
  90.  
  91.     return T;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement