static void Main()
    {
        int[] tab = { 10, 16, 12, 7, 9, 2, 21, 6, 17, 1, 15 };

        Drzewo drzewoA = new Drzewo();

        for (int i = 0; i < tab.Length; i++)
        {
            Węzeł w = new Węzeł();
            InicjujWęzeł(w, tab[i]);
            WstawRekurencyjnie(drzewoA, w);
        }

        Console.WriteLine("====PRZED WSTAWIENIEM====");
        Wypisuj(drzewoA.korzeń, 0);

        Węzeł nowy = UtwórzWęzeł(14);

        WstawJakoKorzeń(ref drzewoA, nowy);

        Console.WriteLine("====PO WSTAWIENIU====");
        Wypisuj(drzewoA.korzeń, 0);
        Console.WriteLine();

        Console.ReadLine();
    }
    static void Main()
    {
        int[] tab = { 10, 16, 12, 7, 9, 2, 21, 6, 17, 1, 15 };

        Drzewo drzewoA = new Drzewo();

        for (int i = 0; i < tab.Length; i++)
        {
            Węzeł w = new Węzeł();
            InicjujWęzeł(w, tab[i]);
            WstawRekurencyjnie(drzewoA, w);
        }

        //ZADANIE 7

        Console.WriteLine("-------- DRZEWO ---------");

        Wypisuj(drzewoA.korzeń, 0);

        Console.WriteLine("-------- po obrocie wezla 16 w prawo ---------");

        PrawaRotacja(drzewoA.korzeń.prawy);

        Wypisuj(drzewoA.korzeń, 0);
        Console.WriteLine();

        Console.WriteLine("-------- po obrocie wezla w lewo ---------");

        LewaRotacja(drzewoA.korzeń.prawy);

        Wypisuj(drzewoA.korzeń, 0);
        Console.WriteLine("==============");

        Console.ReadKey();
    }
    static void Main(string[] args)
    {
        Drzewo drzewo = new Drzewo();

        drzewo.korzeń = UtwórzWęzeł("F");
        Węzeł wB = UtwórzWęzeł("B");
        Węzeł wA = UtwórzWęzeł("A");
        Węzeł wC = UtwórzWęzeł("C");
        Węzeł wD = UtwórzWęzeł("D");
        Węzeł wE = UtwórzWęzeł("E");
        Węzeł wG = UtwórzWęzeł("G");
        Węzeł wH = UtwórzWęzeł("H");
        Węzeł wI = UtwórzWęzeł("I");

        DodajLewy(wD, wC);
        DodajPrawy(wD, wE);
        DodajLewy(wB, wA);
        DodajPrawy(wB, wD);

        DodajLewy(wI, wH);
        DodajPrawy(wG, wI);

        DodajLewy(drzewo.korzeń, wB);
        DodajPrawy(drzewo.korzeń, wG);

        SzukajRodzica(drzewo.korzeń, "E", "");
        Console.ReadKey();
    }
Esempio n. 4
0
    static int Min(Drzewo d)
    {
        Węzeł tmp = d.korzeń;

        while (tmp.lewy != null)
        {
            tmp = tmp.lewy;
        }
        return(tmp.wartość);
    }
 static void WstawRekurencyjnie(Drzewo drzewo, Węzeł węzeł)
 {
     if (drzewo.korzeń == null)
     {
         drzewo.korzeń = węzeł;
     }
     else
     {
         WstawRekurencyjnie(drzewo.korzeń, węzeł);
     }
 }
Esempio n. 6
0
    static void Main(string[] args)
    {
        Drzewo drzewo    = new Drzewo();
        Węzeł  korzeń    = UtwórzWęzeł("");
        string nawiasowe = "(A(B(F)(D(H))(J))(C(G)(E(K))))"; //przykład z wykładu

        KonstruujDrzewo(drzewo, korzeń, nawiasowe);          //nasz algorytm

        //testowo przejde drzewo tylko w lewą stronę

        Węzeł test = drzewo.korzeń;

        while (true)
        {
            Console.WriteLine(test.wartość);

            if (test.dzieci.Count != 0)
            {
                test = test.dzieci[0];
            }
            else
            {
                break;
            }
        }

        //testowo przejde drzewo tylko w prawą stronę

        Console.WriteLine();
        test = drzewo.korzeń;

        while (true)
        {
            Console.WriteLine(test.wartość);

            if (test.dzieci.Count != 0)
            {
                test = test.dzieci[test.dzieci.Count - 1];
            }
            else
            {
                break;
            }
        }

        Console.ReadKey();
    }
Esempio n. 7
0
    static int Następnik(Węzeł korzeń, Węzeł węzeł)
    {
        if (korzeń.wartość == węzeł.wartość)
        {
            Drzewo tmp = new Drzewo();
            tmp.korzeń = korzeń.prawy;

            return(Min(tmp));
        }

        if (korzeń.wartość > węzeł.wartość)
        {
            return(Następnik(korzeń.lewy, węzeł));
        }
        else
        {
            return(Następnik(korzeń.prawy, węzeł));
        }
    }
    static void PrawaRotacja(Węzeł węzeł)
    {
        if (węzeł.lewy == null)
        {
            Console.WriteLine("Nie można zamienić: {0}", węzeł.wartość);
            return;
        }

        Drzewo poddrzewo = new Drzewo();
        Węzeł  podkorzeń = UtwórzWęzeł(węzeł.wartość);

        poddrzewo.korzeń = podkorzeń;

        poddrzewo.korzeń.lewy  = węzeł.lewy.prawy;
        poddrzewo.korzeń.prawy = węzeł.prawy;

        węzeł.wartość = węzeł.lewy.wartość;
        węzeł.prawy   = poddrzewo.korzeń;
        węzeł.lewy    = węzeł.lewy.lewy;
    }
Esempio n. 9
0
    static void Main()
    {
        int[] tab = { 10, 16, 12, 7, 9, 2, 21, 6, 17, 1, 15 };

        Drzewo drzewoA = new Drzewo();

        for (int i = 0; i < tab.Length; i++)
        {
            Węzeł w = new Węzeł();
            InicjujWęzeł(w, tab[i]);
            WstawRekurencyjnie(drzewoA, w);
        }

        Wypisuj(drzewoA.korzeń, 0);
        Console.WriteLine();

        Console.WriteLine("======================");
        Console.WriteLine("Poprzednik węzła 16: {0}", Poprzednik(drzewoA.korzeń, drzewoA.korzeń.prawy));
        Console.WriteLine("Następnik węzła 16: {0}", Następnik(drzewoA.korzeń, drzewoA.korzeń.prawy));

        Console.ReadKey();
    }
 static void Wstaw(Drzewo drzewo, Węzeł węzeł)
 {
     if (drzewo.korzeń == null)
     {
         drzewo.korzeń = węzeł;
     }
     else
     {
         Węzeł tmp = drzewo.korzeń;
         while (tmp != null)
         {
             if (tmp.wartość > węzeł.wartość)
             {
                 if (tmp.lewy != null)
                 {
                     tmp = tmp.lewy;
                 }
                 else
                 {
                     tmp.lewy = węzeł;
                     return;
                 }
             }
             else
             {
                 if (tmp.prawy != null)
                 {
                     tmp = tmp.prawy;
                 }
                 else
                 {
                     tmp.prawy = węzeł;
                     return;
                 }
             }
         }
     }
 }
Esempio n. 11
0
        static void Main(string[] args)
        {
            Osoba.Osoba[] osoby = new Osoba.Osoba[4];

            for (int i = 0; i <= 3; i++)
            {
                osoby[i] = new Osoba.Osoba();
                osoby[i].WprowadzOsobe();
            }

            Console.WriteLine("Drzewo 1 - Baza");
            Drzewo drzewo1 = new Drzewo(osoby);

            drzewo1.PrintAll();

            Console.WriteLine("Drzewo 2 - kopiowanie glebokie");
            Drzewo drzewo2 = drzewo1.KopiujDrzewoGleboko();

            drzewo2.PrintAll();

            Console.WriteLine("Drzewo 3 - kopiowanie - osoby są powiązane");
            Drzewo drzewo3 = drzewo1.KopiujDrzewo();

            drzewo3.PrintAll();

            Console.WriteLine("Drzewo 4 - kopiowanie glebokie");
            Drzewo drzewo4 = (Drzewo)drzewo1.Clone();

            drzewo4.PrintAll();

            if (drzewo1.ZwrocOsobe() == drzewo2.ZwrocOsobe())
            {
                Console.WriteLine("drzewo1.ZwrocOsobe() == drzewo2.ZwrocOsobe() ===> true");
            }
            else
            {
                Console.WriteLine("drzewo1.ZwrocOsobe() == drzewo2.ZwrocOsobe() ===> false");
            }

            if (drzewo1.ZwrocOsobe() == drzewo3.ZwrocOsobe())
            {
                Console.WriteLine("drzewo1.ZwrocOsobe() == drzewo3.ZwrocOsobe() ===> true");
            }
            else
            {
                Console.WriteLine("drzewo1.ZwrocOsobe() == drzewo3.ZwrocOsobe() ===> false");
            }

            if (drzewo1.ZwrocOsobe() == drzewo4.ZwrocOsobe())
            {
                Console.WriteLine("drzewo1.ZwrocOsobe() == drzewo4.ZwrocOsobe() ===> true");
            }
            else
            {
                Console.WriteLine("drzewo1.ZwrocOsobe() == drzewo4.ZwrocOsobe() ===> false");
            }



            Console.ReadKey();
        }
    static void WstawJakoKorzeń(ref Drzewo drzewo, Węzeł węzeł)
    {
        List <bool> sciezka = new List <bool>(); //teoretycznie to mogłaby być tablica o rozmiarze wysokości drzewa + 1

        if (drzewo.korzeń == null)
        {
            drzewo.korzeń = węzeł;
        }
        else
        {
            Węzeł tmp = drzewo.korzeń;
            while (tmp != null)
            {
                if (tmp.wartość > węzeł.wartość)
                {
                    sciezka.Add(false);

                    if (tmp.lewy != null)
                    {
                        tmp = tmp.lewy;
                    }
                    else
                    {
                        tmp.lewy = węzeł;
                        break;
                    }
                }
                else
                {
                    sciezka.Add(true);

                    if (tmp.prawy != null)
                    {
                        tmp = tmp.prawy;
                    }
                    else
                    {
                        tmp.prawy = węzeł;
                        break;
                    }
                }
            }
        }

        for (int i = sciezka.Count - 1; i >= 0; --i)
        {
            Węzeł rodzic = drzewo.korzeń;

            for (int j = 0; j < i; ++j)
            {
                if (sciezka[j] == true)
                {
                    rodzic = rodzic.prawy;
                }
                else
                {
                    rodzic = rodzic.lewy;
                }
            }

            if (sciezka[i] == false)
            {
                PrawaRotacja(rodzic);
            }
            else
            {
                LewaRotacja(rodzic);
            }
        }
    }
Esempio n. 13
0
 static void KonstruujDrzewo(Drzewo drzewo, Węzeł korzeń, string nawiasowe)
 {
     DołączDzieci(nawiasowe, korzeń);
     drzewo.korzeń = korzeń.dzieci[0];
 }