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 Węzeł UtwórzWęzeł(String wartość)
    {
        Węzeł węzeł = new Węzeł();

        węzeł.wartość = wartość;
        return(węzeł);
    }
    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();
    }
    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 WstawRekurencyjnie(Węzeł korzeń, Węzeł węzeł)
 {
     if (korzeń.wartość > węzeł.wartość)
     {
         if (korzeń.lewy == null)
         {
             korzeń.lewy = węzeł;
         }
         else
         {
             WstawRekurencyjnie(korzeń.lewy, węzeł);
         }
     }
     else
     {
         if (korzeń.prawy == null)
         {
             korzeń.prawy = węzeł;
         }
         else
         {
             WstawRekurencyjnie(korzeń.prawy, węzeł);
         }
     }
 }
    // in-order z wcięciami (odwrotnie)
    static void Wypisuj(Węzeł węzeł, int poziom)
    {
        string wcięcie = "";
        int    p       = poziom;

        while (p-- > 0)
        {
            wcięcie += " ";
        }
        if (węzeł == null)
        {
            Console.WriteLine(wcięcie + "*");
        }
        else
        {
            if (węzeł.lewy != null || węzeł.prawy != null)
            {
                Wypisuj((Węzeł)węzeł.prawy, poziom + 3);
            }
            Console.WriteLine(wcięcie + węzeł.wartość);
            if (węzeł.lewy != null || węzeł.prawy != null)
            {
                Wypisuj((Węzeł)węzeł.lewy, poziom + 3);
            }
        }
    }
Exemple #7
0
        public void Sort()
        {
            Węzeł  cur = głowa, index = null;
            Klient temp;

            if (głowa == null)
            {
                return;
            }
            else
            {
                while (cur != null)
                {
                    index = cur.następny;
                    while (index != null)
                    {
                        if (cur.klient.doZapłaty > index.klient.doZapłaty)
                        {
                            temp         = cur.klient;
                            cur.klient   = index.klient;
                            index.klient = temp;
                        }
                        index = index.następny;
                    }
                    cur = cur.następny;
                }
            }
        }
Exemple #8
0
 public void Wyświetl()
 {
     for (Węzeł tmp = głowa; tmp != null; tmp = tmp.następny)
     {
         Console.WriteLine(tmp.klient.ZwrocDane());
     }
 }
Exemple #9
0
        public Klient UsuńZOgona()
        {
            if (ogon == null)
            {
                throw new Exception("Lista jest pusta");
            }
            Klient tmp = ogon.klient;

            if (głowa == ogon)
            {
                głowa = ogon = null;
            }
            else
            {
                Węzeł wezel;
                // w pętli przejdziemy ze zmienną wezel o jeden element przed ogon
                for (wezel = głowa; wezel.następny != ogon; wezel = wezel.następny)
                {
                    ;
                }
                // zmienna wezel należy ustawić jako nowy ogon
                ogon = wezel;
                // i wyczyścić jego następcę
                ogon.następny = null;
            }
            return(tmp);
        }
Exemple #10
0
    static Węzeł UtwórzWęzeł(String wartość)
    {
        Węzeł węzeł = new Węzeł();

        węzeł.wartość = wartość;
        węzeł.dzieci  = new List <Węzeł>();
        return(węzeł);
    }
Exemple #11
0
        public void DodajDoGłowy(string imię)
        {
            Węzeł tmp = new Węzeł();

            tmp.imię = imię;
            // dodany element staje się głową, więc dotychczasowa głowa staje się obiektem, który jest "następny"
            tmp.następny = głowa;
            // dodany element staje się głową
            głowa = tmp;
        }
Exemple #12
0
    static int Min(Drzewo d)
    {
        Węzeł tmp = d.korzeń;

        while (tmp.lewy != null)
        {
            tmp = tmp.lewy;
        }
        return(tmp.wartość);
    }
Exemple #13
0
        public int ZwróćRozmiar()
        {
            int licznik = 0;

            for (Węzeł tmp = głowa; tmp != null; tmp = tmp.następny)
            {
                licznik++;
            }
            return(licznik);
        }
Exemple #14
0
    static Węzeł UtwórzWęzeł(int wartość)
    {
        Węzeł węzeł = new Węzeł();

        węzeł.wartość = wartość;

        węzeł.prawy = null;
        węzeł.lewy  = null;

        return(węzeł);
    }
 static void WstawRekurencyjnie(Drzewo drzewo, Węzeł węzeł)
 {
     if (drzewo.korzeń == null)
     {
         drzewo.korzeń = węzeł;
     }
     else
     {
         WstawRekurencyjnie(drzewo.korzeń, węzeł);
     }
 }
Exemple #16
0
 Węzeł OdczytajWęzeł(StreamReader sr)
 {
     if (sr.EndOfStream)
     {
         return(null);
     }
     else
     {
         Węzeł odczyt = new Węzeł();
         odczyt.imię = sr.ReadLine();
         return(odczyt);
     }
 }
Exemple #17
0
        public void Odwróć()
        {
            // metoda odwracająca kolejność elementów na liście
            Węzeł tmp = głowa;
            Węzeł tmp2;

            while (tmp.następny != null)
            {
                tmp2          = tmp.następny;
                tmp.następny  = tmp2.następny;
                tmp2.następny = głowa;
                głowa         = tmp2;
            }
        }
Exemple #18
0
        public void DodajDoGłowy(Klient k)
        {
            Węzeł tmp = new Węzeł();

            tmp.klient = k;
            // dodany element staje się głową, więc dotychczasowa głowa staje się obiektem, który jest "następny"
            tmp.następny = głowa;
            // dodany element staje się głową
            głowa = tmp;
            // jeśli uprzednio lista była pusta, ogon i głowa wskazują na ten sam element
            if (ogon == null)
            {
                ogon = tmp;
            }
        }
Exemple #19
0
        public int Wyszukaj(string nazwisko)
        {
            Węzeł tmp     = głowa;
            int   counter = -1;

            for (int i = 0; i < ZwróćRozmiar(); i++)
            {
                if (głowa.klient.nazwisko == nazwisko)
                {
                    counter = i;
                }
                tmp = tmp.następny;
            }
            return(counter);
        }
Exemple #20
0
        public string UsuńZGłowy()
        {
            string tmp;

            if (głowa != null) // sprawdzamy, czy lista nie jest pusta
            {
                tmp   = głowa.imię;
                głowa = głowa.następny;
                return(tmp);
            }
            else
            {
                throw new Exception("Lista pusta!");
            }
        }
Exemple #21
0
        public void DodajDoOgona(Klient k)
        {
            Węzeł tmp = new Węzeł();

            tmp.klient = k;
            if (ogon == null)
            {
                // lista jest pusta, więc ogon ma tę samą wartość, co głowa
                ogon = głowa = tmp;
            }
            else
            {
                ogon.następny = tmp;
                ogon          = tmp;
            }
        }
 static void SzukajRodzica(Węzeł węzeł, string wartosc, string rodzic)
 {
     if (węzeł == null)
     {
         return;
     }
     if (wartosc == węzeł.wartość)
     {
         Console.WriteLine(rodzic);
     }
     else
     {
         SzukajRodzica(węzeł.lewy, wartosc, węzeł.wartość);
         SzukajRodzica(węzeł.prawy, wartosc, węzeł.wartość);
     }
 }
Exemple #23
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();
    }
Exemple #24
0
        public void Zamień(string nazwisko1, string nazwisko2)
        {
            //Przypdek gdy to ta sama/nierozróżnialna osoba
            if (nazwisko1 == nazwisko2)
            {
                return;
            }
            Węzeł prevX = null, currX = głowa;

            while (currX != null && currX.klient.nazwisko != nazwisko1)
            {
                prevX = currX;
                currX = currX.następny;
            }
            Węzeł prevY = null, currY = głowa;

            while (currY != null && currY.klient.nazwisko != nazwisko2)
            {
                prevY = currY;
                currY = currY.następny;
            }
            if (currX == null || currY == null)
            {
                return;
            }
            if (prevX != null)
            {
                prevX.następny = currY;
            }
            else
            {
                głowa = currY;
            }
            if (prevY != null)
            {
                prevY.następny = currX;
            }
            else
            {
                głowa = currX;
            }
            Węzeł temp = currX.następny;

            currX.następny = currY.następny;
            currY.następny = temp;
        }
Exemple #25
0
        public int Minimum()
        {
            Węzeł  tmp    = głowa;
            double min    = głowa.klient.doZapłaty;
            int    indeks = Wyszukaj(głowa.klient.nazwisko);

            for (int i = 0; i < ZwróćRozmiar(); i++)
            {
                tmp = tmp.następny;
                if (tmp.klient.doZapłaty < min)
                {
                    min    = tmp.klient.doZapłaty;
                    indeks = Wyszukaj(tmp.klient.nazwisko);
                }
            }
            return(indeks);
        }
        int Ile(Węzeł węzeł)
        {
            if (węzeł == null)
            {
                return(0);
            }
            int waga = 1;

            if (węzeł.lewy != null)
            {
                waga += Ile(węzeł.lewy);
            }
            if (węzeł.prawy != null)
            {
                waga += Ile(węzeł.prawy);
            }
            return(waga);
        }
        void CzyZawiera(Węzeł węzeł, int wartość, int wątek)
        {
            if (węzeł == null)
            {
                return;
            }

            if (węzeł.wartość == wartość)
            {
                if (wątek == 1)
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                }
                if (wątek == 2)
                {
                    Console.ForegroundColor = ConsoleColor.Green;
                }
                if (wątek == 3)
                {
                    Console.ForegroundColor = ConsoleColor.Cyan;
                }
                if (wątek == 4)
                {
                    Console.ForegroundColor = ConsoleColor.DarkYellow;
                }

                Console.WriteLine("\tCzytelnik {0}...znalazł {1}.", wątek, wartość);

                Console.ForegroundColor = ConsoleColor.Gray;

                return;
            }

            if (wartość < węzeł.wartość)
            {
                CzyZawiera(węzeł.lewy, wartość, wątek);
            }

            else
            {
                CzyZawiera(węzeł.prawy, wartość, wątek);
            }
        }
Exemple #28
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;
    }
Exemple #30
0
        public void Wstaw(Klient k, int indeks)
        {
            Węzeł temp = new Węzeł();

            temp.klient   = k;
            temp.następny = null;
            if (głowa == null)
            {
                if (indeks != 0)
                {
                    return;
                }
                else
                {
                    głowa = temp;
                }
            }
            if (głowa != null && indeks == 0)
            {
                temp.następny = głowa;
                głowa         = temp;
                return;
            }
            Węzeł cur = głowa;
            Węzeł pre = null;
            int   i   = 0;

            while (i < indeks)
            {
                pre = cur;
                cur = cur.następny;
                if (cur == null)
                {
                    break;
                }
                i++;
            }
            temp.następny = cur;
            pre.następny  = temp;
        }