Advertisement
Guest User

Untitled

a guest
Dec 7th, 2016
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.62 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7.  
  8. namespace BST
  9. {
  10.     class Program
  11.     {
  12.         public static int cmp(string s1, string s2)
  13.         {
  14.             int d1 = 0, d2 = 0;
  15.  
  16.             int i = 0;
  17.             while (i != 101)
  18.             {
  19.                 if (i == s1.Length)
  20.                     break;
  21.                 if (s1[i] == ',')
  22.                     break;
  23.                 d1++;
  24.                 i++;
  25.             }
  26.  
  27.             i = 0;
  28.             while (i != 101)
  29.             {
  30.                 if (i == s2.Length)
  31.                     break;
  32.                 if (s2[i] == ',')
  33.                     break;
  34.                 d2++;
  35.                 i++;
  36.             }
  37.  
  38.             if (d1 < d2)
  39.                 return -1;
  40.  
  41.             if (d2 < d1)
  42.                 return 1;
  43.             if (d1 == d2)
  44.             {
  45.                 int size = s1.Length;
  46.                 int size1 = s2.Length;
  47.                 if (size > size1)
  48.                 {
  49.                     for (int j = 0; j < size1; j++)
  50.                     {
  51.                         if (s1[j] < s2[j])
  52.                             return -1;
  53.                         if (s2[j] < s1[j])
  54.                             return 1;
  55.                     }
  56.                 }
  57.                 else
  58.                 for (int j = 0; j < size; j++)
  59.                 {
  60.                     if (s1[j] < s2[j])
  61.                         return -1;
  62.                     if (s2[j] < s1[j])
  63.                         return 1;
  64.                 }
  65.             }
  66.  
  67.             return 0;
  68.         }
  69.         public static int cmp1(string s1, string s2)
  70.         {
  71.             int d1 = 0, d2 = 0;
  72.  
  73.             int i = 0;
  74.             while (i != 101)
  75.             {
  76.                 if (i == s1.Length)
  77.                     break;
  78.                 if (s1[i] == ',')
  79.                     break;
  80.                 d1++;
  81.                 i++;
  82.             }
  83.  
  84.             i = 0;
  85.             while (i != 101)
  86.             {
  87.                 if (i == s2.Length)
  88.                     break;
  89.                 if (s2[i] == ',')
  90.                     break;
  91.                 d2++;
  92.                 i++;
  93.             }
  94.  
  95.             if (d1 < d2)
  96.                 return -1;
  97.  
  98.             if (d2 < d1)
  99.                 return 1;
  100.             if (d1 == d2)
  101.             {
  102.                 for (int j = 0; j < d1; j++)
  103.                 {
  104.                     if (s1[j] < s2[j])
  105.                         return -1;
  106.                     if (s2[j] < s1[j])
  107.                         return 1;
  108.                     else
  109.                         return 0;
  110.                 }
  111.             }
  112.             return 0;
  113.            
  114.         }
  115.         public class Drzewo
  116.         {
  117.            
  118.             public Node korzen;
  119.             private int poziom=0;
  120.             public Drzewo()
  121.             {
  122.                 korzen = null;
  123.             }
  124.  
  125.             public Drzewo(string wartosc)
  126.             {
  127.                 korzen = new Node(wartosc);
  128.             }
  129.             public void W(string wartosc)
  130.             {
  131.                
  132.                 if (korzen == null)
  133.                 {
  134.                     Node nowy = new Node(wartosc);
  135.                     korzen = nowy;
  136.                     return;
  137.                 }
  138.                 else
  139.                 {
  140.                     Node obecny = korzen;
  141.                     bool dodany = false;
  142.                     do
  143.                     {
  144.                         if(cmp(wartosc, obecny.wartosc) == 0)
  145.                         {
  146.                             dodany = true;
  147.                         }
  148.                          else if (cmp(wartosc, obecny.wartosc) < 0)
  149.                              {
  150.                             if (obecny.lewy == null)
  151.                             {
  152.                                 Node nowy = new Node(wartosc);
  153.                                 obecny.lewy = nowy;
  154.                                 dodany = true;
  155.                             }
  156.                             else
  157.                             {
  158.                                 obecny = obecny.lewy;
  159.                                 poziom++;
  160.                             }
  161.                               }
  162.                         else if (cmp(wartosc, obecny.wartosc) > 0)
  163.                         {
  164.                             if (obecny.prawy == null)
  165.                             {
  166.                                 Node nowy = new Node(wartosc);
  167.                                 obecny.prawy = nowy;
  168.                                 dodany = true;
  169.                             }
  170.                             else
  171.                             {
  172.                                 obecny = obecny.prawy;
  173.                                 poziom++;
  174.                             }
  175.                         }
  176.                     } while (!dodany);
  177.                 }
  178.             }
  179.             public void S(string wartosc)
  180.             {
  181.                 Node obecny = korzen;
  182.               while(true)
  183.                 {
  184.                     if (obecny == null)
  185.                     {
  186.                         Console.WriteLine("NIE");
  187.                         break;
  188.                     }
  189.                     if (cmp(wartosc, obecny.wartosc) == 0)
  190.                     {
  191.                         Console.WriteLine("TAK");
  192.                         break;
  193.                     }
  194.                     else if (cmp(wartosc, obecny.wartosc) < 0)
  195.                     {
  196.                         obecny = obecny.lewy;
  197.                     }
  198.                     else if (cmp(wartosc, obecny.wartosc) > 0)
  199.                     {
  200.                         obecny = obecny.prawy;
  201.                     }
  202.                 }
  203.             }
  204.            
  205.     public void U(string wartosc)
  206.             {
  207.                     Node obecny = korzen;
  208.                     Node pom = obecny;
  209.                 while (true)
  210.                 {
  211.                     if (obecny == null)
  212.                     {
  213.                         break;
  214.                     }
  215.                     if (cmp(wartosc, obecny.wartosc) == 0)
  216.                     {
  217.                         if (obecny.lewy == null && obecny.prawy == null)
  218.                         {
  219.                             obecny.wartosc = null;
  220.                             break;
  221.                         }
  222.                         else if (obecny.lewy == null && obecny.prawy != null)
  223.                         {
  224.                             obecny.wartosc = obecny.prawy.wartosc;
  225.                         }
  226.                         else if (obecny.lewy != null && obecny.prawy == null)
  227.                         {
  228.                             obecny.wartosc = obecny.lewy.wartosc;
  229.                         }
  230.  
  231.                         else if (obecny.lewy != null && obecny.prawy != null)
  232.                         {
  233.                             pom = obecny;
  234.                             obecny = obecny.prawy;
  235.                             while (obecny.lewy != null)
  236.                             {
  237.                                 obecny = obecny.lewy;
  238.                                 pom = obecny;
  239.                                 if (obecny.prawy == null)
  240.                                 {
  241.                                     obecny = null;
  242.                                 }
  243.                                 else
  244.                                 {
  245.                                     obecny = obecny.prawy;
  246.                                 }
  247.                                 korzen = pom;
  248.                             }
  249.                         }
  250.  
  251.                         else if (cmp(wartosc, obecny.wartosc) < 0)
  252.                         {
  253.                             obecny = obecny.lewy;
  254.                         }
  255.                         else if (cmp(wartosc, obecny.wartosc) > 0)
  256.                         {
  257.                             obecny = obecny.prawy;
  258.                         }
  259.                         }
  260.                 }
  261.             }
  262.             public int L(Node korzen,string wartosc)
  263.             {
  264.                 Node obecny = korzen;
  265.  
  266.                 int licznik = 0;
  267.  
  268.                     if (obecny == null)
  269.                     {
  270.                         Console.WriteLine("BRAK WYNIKÓW");
  271.                     }
  272.                     if (cmp1(wartosc, obecny.wartosc) == 0 && obecny.lewy!=null && obecny.prawy!=null )
  273.                     {
  274.                         return L(obecny.lewy,wartosc)+ L(obecny.prawy, wartosc)+1;
  275.                     }
  276.                     else if (cmp1(wartosc, obecny.wartosc) < 0)
  277.                     {
  278.                         obecny = obecny.lewy;
  279.                     }
  280.                     else if (cmp1(wartosc, obecny.wartosc) > 0)
  281.                     {
  282.                         obecny = obecny.prawy;
  283.                     }
  284.                    
  285.                
  286.                 return licznik;
  287.  
  288.             }
  289.         }
  290.         public class Node
  291.         {
  292.             public string wartosc;
  293.             public Node lewy;
  294.             public Node prawy;
  295.             public Node(string wartosc, Node lewy, Node prawy)
  296.             {
  297.                 this.wartosc = wartosc;
  298.                 this.lewy = lewy;
  299.                 this.prawy = prawy;
  300.             }
  301.             public Node(string wartosc)
  302.             {
  303.                 this.wartosc = wartosc;
  304.                 this.lewy = null;
  305.                 this.prawy = null;
  306.             }
  307.         }
  308.         static void Main(string[] args)
  309.         {
  310.            
  311.             Drzewo d = new Drzewo();
  312.  
  313.             int n,i;
  314.             string f, s;
  315.  
  316.             StreamReader reader = new StreamReader("plik.txt");
  317.             string linia = reader.ReadLine();
  318.             n = int.Parse(linia);
  319.             for (i = 0; i < n; i++)
  320.             {
  321.                 if (reader.EndOfStream) break;
  322.                 else
  323.                 {
  324.                     string linijka = reader.ReadLine();
  325.                     string[] oddzielone = linijka.Split(null);
  326.                     f = oddzielone[0];
  327.                     s = oddzielone[1];
  328.                     if (cmp(f, "W") == 0)
  329.                     {
  330.                         d.W(s);
  331.  
  332.                     }
  333.                     else if (cmp(f, "S") == 0)
  334.                     {
  335.                         d.S(s);
  336.  
  337.                     }
  338.                     else if (cmp(f, "U") == 0)
  339.                     {
  340.                         d.U(s);
  341.  
  342.                     }
  343.                     else if (cmp(f, "L") == 0)
  344.                     {
  345.                         d.L(d.korzen,s);
  346.  
  347.                     }
  348.                 }
  349.  
  350.            }
  351.             Console.ReadKey();
  352.         }
  353.     }
  354. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement