/// <summary> /// Расчитывает максимальный уровень в дереве. /// </summary> /// <param name="head"></param> private static void RezultMaxLvl(Element head) { Stack <Stak> rStak = new Stack <Stak>(); //RightStak аналог RES Stak.MaxLvl = 1; Stak tmpStak = new Stak { element = head, Lvl = 1 }; while (tmpStak.element.Left != null || rStak.Count != 0 || tmpStak.element.Right != null) { if (tmpStak.element.Right != null) { rStak.Push(new Stak { element = tmpStak.element.Right, Lvl = tmpStak.Lvl + 1 }); if (tmpStak.Lvl + 1 > Stak.MaxLvl) { Stak.MaxLvl = tmpStak.Lvl + 1; } } if (tmpStak.element.Left != null) { tmpStak.element = tmpStak.element.Left; tmpStak.Lvl = tmpStak.Lvl + 1; if (tmpStak.Lvl > Stak.MaxLvl) { Stak.MaxLvl = tmpStak.Lvl; } } else { tmpStak = rStak.Pop(); } } }
static public List <PointTree> Print(BinaryTree tree, int height, int width) { Stak.Height = height; //выставили высоту if (tree.Head != null) { RezultMaxLvl(tree.Head); //выставили максимальный уровень } else { return(null); } List <PointTree> Points = new List <PointTree>(); Stack <Stak> stak = new Stack <Stak>(); Stak tmpStak = new Stak { element = tree.Head, Lvl = 1, sizeL = 0, sizeR = width }; PointTree tmpPoint = new PointTree { Value = tmpStak.element.Value, NextPoint = RezultPoint(tmpStak), LastPoint = RezultPoint(tmpStak) }; Points.Add(tmpPoint); while (tmpStak.element.Left != null || stak.Count != 0 || tmpStak.element.Right != null) { if (tmpStak.element.Right != null) { stak.Push(new Stak { element = tmpStak.element.Right, Lvl = tmpStak.Lvl + 1, sizeL = tmpPoint.NextPoint.X, sizeR = tmpStak.sizeR, LastPoint = tmpPoint.NextPoint }); } if (tmpStak.element.Left != null) { tmpStak.element = tmpStak.element.Left; tmpStak.Lvl = tmpStak.Lvl + 1; tmpStak.sizeR = tmpPoint.NextPoint.X; tmpStak.LastPoint = tmpPoint.NextPoint; tmpPoint = new PointTree { Value = tmpStak.element.Value, NextPoint = RezultPoint(tmpStak), LastPoint = tmpStak.LastPoint }; Points.Add(tmpPoint); } else { tmpStak = stak.Pop(); tmpPoint = new PointTree { Value = tmpStak.element.Value, NextPoint = RezultPoint(tmpStak), LastPoint = tmpStak.LastPoint }; Points.Add(tmpPoint); } } return(Points); }
/// <summary> /// Расчитывает координаты точки по данным из Stak. /// </summary> /// <param name="stak"></param> /// <param name="height"></param> /// <returns></returns> static private Point RezultPoint(Stak stak) // MaxLvl заранее известен { Point rezult = new Point(); int leftCount = CountTree(stak.element.Left); int rightCount = CountTree(stak.element.Right); rezult.X = stak.sizeL + ((stak.sizeR - stak.sizeL) / (leftCount + rightCount + 2) * (leftCount + 1)); rezult.Y = Stak.Height * stak.Lvl / (Stak.MaxLvl + 1); return(rezult); }
static void Main(string[] args) { //Console.WriteLine("Example Stopwatch"); //var stopWatch = new Stopwatch(); //for (var i = 0; i < 2; i++) //{ // stopWatch.Start(); // Thread.Sleep(1000); // //for (var j = 0; j < 1000; j++) // // Thread.Sleep(1); //} ////stopWatch.StartTime = DateTime.Today.Add(1); ////stopWatch.EndTime = DateTime.Today.AddYears(-1); ////stopWatch.Start(DateTime.Now); ////stopWatch.Stop(DateTime.Now.AddYears(-1)); //stopWatch.Stop(); //Console.WriteLine("Duration : ", stopWatch.GetInterval()); //Console.WriteLine("Press Enter to run the stopwatch one more time."); Console.WriteLine("======================="); Console.WriteLine("Example stack"); Stak _stack = new Stak(); int ini = 0; int max = 5; for (int i = ini; i <= max; i++) { _stack.Push(i); } for (int i = ini; i <= max; i++) { Console.WriteLine(_stack.Pop()); } Console.ReadLine(); Console.ReadLine(); }
static void zoo() { Stak <Beer> beers = new Stak <Beer>(); ZooCleaner.Wash(beers); }
public void InitialTest() { stak = new Stak(); Assert.IsTrue(stak.IsEmpty); }