Esempio n. 1
0
        public WezelPolski WstawSlowo(ref WezelPolski root, string slowoPolskie)
        {
            if (root == null) //gdy dotrze do końca drzewa, tworzy nowy element
            {
                root = new WezelPolski
                {
                    slowo = slowoPolskie
                };
            }
            else if (string.Compare(slowoPolskie, root.slowo) < 0)
            {
                WezelPolski lewy = (WezelPolski)root.lewy;
                root.lewy = WstawSlowo(ref lewy, slowoPolskie);
                root.waga++;
            }
            else if (string.Compare(slowoPolskie, root.slowo) > 0)
            {
                WezelPolski prawy = (WezelPolski)root.prawy;
                root.prawy = WstawSlowo(ref prawy, slowoPolskie);
                root.waga--;
            }
            else
            {
                throw new AVLException("Slowo znajduje sie juz w zbiorze, synonimy sa niedopuszczalne");
            }
            //sprawdzanie wag

            /*if (root.waga == 0)
             *  //w jaki sposób można przerwać rekurencje?
             *  throw new NotImplementedException();
             */
            if (root.waga == 2)
            {
                if (root.lewy.waga == 1)
                {
                    Wezel wezel = root;
                    RotacjaRR(ref wezel);
                    root = (WezelPolski)wezel;
                    //ustawianie nowych wag
                    root.waga       = 0;
                    root.prawy.waga = 0;
                }
                else
                {
                    Wezel C     = root.lewy.prawy;
                    Wezel wezel = root.lewy;
                    RotacjaLL(ref wezel);
                    root.lewy = (WezelPolski)wezel;
                    wezel     = root;
                    RotacjaRR(ref wezel);
                    root = (WezelPolski)wezel;
                    //ustawianie nowych wag
                    root.waga = 0;
                    switch (C.waga)
                    {
                    case (1):

                        root.prawy.waga = 0;
                        root.lewy.waga  = -1;
                        break;

                    case (0):

                        root.prawy.waga = 0;
                        root.lewy.waga  = 0;
                        break;

                    case (-1):
                        root.prawy.waga = 0;
                        root.lewy.waga  = 1;
                        break;
                    }
                }
            }
            if (root.waga == -2)
            {
                if (root.prawy.waga == 1)
                {
                    Wezel C     = root.prawy.lewy;
                    Wezel wezel = root.prawy;
                    RotacjaRR(ref wezel);
                    root.prawy = (WezelPolski)wezel;
                    wezel      = root;
                    RotacjaLL(ref wezel);
                    root = (WezelPolski)wezel;
                    //ustawianie nowych wag
                    root.waga = 0;
                    switch (C.waga)
                    {
                    case (1):

                        root.prawy.waga = 0;
                        root.lewy.waga  = -1;
                        break;

                    case (0):

                        root.prawy.waga = 0;
                        root.lewy.waga  = 0;
                        break;

                    case (-1):
                        root.prawy.waga = 0;
                        root.lewy.waga  = 1;
                        break;
                    }
                }
                else
                {
                    Wezel wezel = root;
                    RotacjaLL(ref wezel);
                    root = (WezelPolski)wezel;
                    //ustawianie nowych wag
                    root.waga       = 0;
                    root.prawy.waga = 0;
                }
            }
            return(root);
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            WezelPolski root = null;

            SlownikPolskiAVL bst = new SlownikPolskiAVL();

            bst.WstawSlowo(ref root, "Anna");
            bst.WstawSlowo(ref root, "Balbina");
            bst.WstawSlowo(ref root, "Czeslaw");
            bst.WstawSlowo(ref root, "Darek");
            bst.WstawSlowo(ref root, "Eugeniusz");
            bst.WstawSlowo(ref root, "Filip");
            bst.WstawSlowo(ref root, "Kasia");
            bst.WstawSlowo(ref root, "Jan");
            bst.WstawSlowo(ref root, "Ludmila");
            bst.WstawSlowo(ref root, "Adam");


            /*int SIZE = 2000000;
             * int[] a = new int[SIZE];
             *
             * Console.WriteLine("Generating random array with {0} values...", SIZE);
             *
             * Random random = new Random();
             *
             * Stopwatch watch = Stopwatch.StartNew();
             *
             * for (int i = 0; i < SIZE; i++)
             * {
             *  a[i] = random.Next(10000);
             * }
             *
             * watch.Stop();
             *
             * Console.WriteLine("Done. Took {0} seconds", (double)watch.ElapsedMilliseconds / 1000.0);
             * Console.WriteLine();
             * Console.WriteLine("Filling the tree with {0} nodes...", SIZE);
             *
             * watch = Stopwatch.StartNew();
             *
             * for (int i = 0; i < SIZE; i++)
             * {
             *  root = bst.insert(root, a[i]);
             * }
             *
             * watch.Stop();
             *
             * Console.WriteLine("Done. Took {0} seconds", (double)watch.ElapsedMilliseconds / 1000.0);
             * Console.WriteLine();
             * Console.WriteLine("Traversing all {0} nodes in tree...", SIZE);
             *
             * watch = Stopwatch.StartNew();
             *
             * bst.traverse(root);
             *
             * watch.Stop();
             *
             * Console.WriteLine("Done. Took {0} seconds", (double)watch.ElapsedMilliseconds / 1000.0);
             * Console.WriteLine();
             *
             * Console.ReadKey();
             */
        }