Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static int Algo_20170628_2_1(BST T, BST P = null)
- {
- var flag = 0;
- var ret = 0;
- if (T != null)
- {
- Console.WriteLine("Ispezionando {0}", T.key);
- if (T.key % 2 == 0)
- flag = 1;
- var x = Algo_20170628_2_1(T.sx, T);
- var y = Algo_20170628_2_1(T.dx, T);
- if (flag == 1 && P != null && x + y == 0)
- {
- if (P.sx == T)
- P.sx = Cancella(T);
- else
- P.dx = Cancella(T);
- }
- ret = x + y + flag;
- Console.WriteLine("Ispezionando {0}: {1}", T.key, ret);
- }
- return ret;
- }
- public static int Algo_20170628_2_1_Miky(BST Tree, BST Dad)
- {
- BST last = null;
- BST T = Tree;
- BST P = Dad;
- var S = new Stack<BST>();
- var RS = new Stack<int>();
- var RD = new Stack<int>();
- var RF = new Stack<int>();
- var ret = 0;
- while (S.Count > 0 || T != null)
- if (T != null)
- {
- Console.WriteLine("Ispezionando {0}", T.key);
- var flag = (T.key % 2 == 0 ? 1 : 0);
- RF.Push(flag);
- RS.Push(0);
- RD.Push(0);
- S.Push(T);
- T = T.Sx;
- }
- else
- {
- T = S.Peek();
- if (T.Dx != null && T.Dx != last)
- {
- T = T.Dx;
- }
- else
- {
- S.Pop();
- last = T;
- var x = RS.Pop();
- var y = RD.Pop();
- var flag = RF.Pop();
- ret = x + y + flag;
- if (T == Tree)
- P = Dad;
- else if (S.Count > 0)
- {
- P = S.Peek();
- if (T == P.dx)
- RD.Push(ret + RD.Pop());
- else
- RS.Push(ret + RS.Pop());
- }
- else
- P = null;
- if (flag == 1 && P != null && x + y == 0)
- {
- var temp = Cancella(T);
- if (P.sx == T)
- P.sx = temp;
- else
- P.dx = temp;
- last = temp;
- }
- Console.WriteLine("Ispezionando {0}: {1}", T.key, ret);
- T = null;
- }
- }
- return ret;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement