Example #1
0
        /// <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();
                }
            }
        }
Example #2
0
        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);
        }
Example #3
0
        /// <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();
        }
Example #5
0
        static void zoo()
        {
            Stak <Beer> beers = new Stak <Beer>();

            ZooCleaner.Wash(beers);
        }
Example #6
0
 public void InitialTest()
 {
     stak = new Stak();
     Assert.IsTrue(stak.IsEmpty);
 }