Facebook
From 997, 5 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 223
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace typy_generyczne
  5. {
  6.     class Program
  7.     {
  8.         public class Wezel<T>
  9.         {
  10.             public Wezel<T> rodzic;
  11.             public Wezel<T> lewe;
  12.             public Wezel<T> prawe;
  13.             public int numer;
  14.             public T wartosc;
  15.  
  16.             public void DodajDziecko(Wezel<T> nowy)
  17.             {
  18.                
  19.                 if (nowy.numer % 2 == 0)
  20.                     rodzic.lewe = nowy;
  21.                 else
  22.                     rodzic.prawe = nowy;
  23.  
  24.                 nowy.rodzic = this;
  25.             }
  26.         }
  27.  
  28.         class Drzewo<T>
  29.         {
  30.             Wezel<T> root=null;
  31.             int lenght=0;
  32.            public List<int> DrogaDoRodzica(int numer)
  33.             {
  34.                 if (numer < 2)
  35.                     throw new Exception("Numer musi byc >=2");
  36.  
  37.                 List<int> wynik = new List<int>();
  38.                 numer = numer / 2;
  39.                 while(numer > 1)
  40.                 {
  41.                     wynik.Add(numer % 2);
  42.                     numer = numer / 2;
  43.                 }
  44.                 wynik.Reverse();
  45.  
  46.  
  47.                 return wynik;
  48.             }
  49.             public Wezel<T> ZnajdzRodzica(int numer)
  50.             {
  51.                 var droga = this.DrogaDoRodzica(numer);
  52.                 Wezel<T> rodzic = this.root;
  53.                 for(int i=0;i<droga.Count;i++)
  54.                 {
  55.                     if (droga[i] == 0)
  56.                         rodzic = rodzic.lewe;
  57.                     else
  58.                         rodzic = rodzic.prawe;
  59.                 }
  60.                 return rodzic;
  61.             }
  62.  
  63.             public void Push(T wartosc)
  64.             {
  65.                 Wezel<T> nowy = new Wezel<T>();
  66.                 nowy.wartosc = wartosc;
  67.                 nowy.numer = lenght + 1;
  68.  
  69.                 if (lenght == 0)
  70.                 {
  71.                     this.root = nowy;
  72.                     return;
  73.                 }
  74.                 var rodzic = this.ZnajdzRodzica(nowy.numer);
  75.                 rodzic.DodajDziecko(nowy);
  76.             }
  77.  
  78.            
  79.         }
  80.         static void Main(string[] args)
  81.         {
  82.             Console.WriteLine("Hello World!");
  83.             Console.ReadLine();
  84.         }
  85.     }
  86. }
  87.  
  88. /* do przycisku:
  89.     Drzewo<int>d=new Drzewo
  90.      
  91.      */
  92.