gride29

zad2

Dec 2nd, 2020
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.39 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4.  
  5. namespace Zad2
  6. {
  7.     class Węzeł
  8.     {
  9.         public String wartość;
  10.         public ArrayList dzieci;
  11.     }
  12.  
  13.     class Drzewo
  14.     {
  15.         public Węzeł korzeń;
  16.     }
  17.  
  18.     class Program
  19.     {
  20.         static Węzeł UtwórzWęzeł(String wartość)
  21.         {
  22.             Węzeł węzeł = new Węzeł();
  23.             węzeł.wartość = wartość;
  24.             węzeł.dzieci = new ArrayList();
  25.             return węzeł;
  26.         }
  27.  
  28.         static void DodajWęzeł(Węzeł węzeł, Węzeł dziecko)
  29.         {
  30.             węzeł.dzieci.Add(dziecko);
  31.         }
  32.  
  33.         static void PreOrder(Węzeł węzeł)
  34.         {
  35.             Console.Write(" " + węzeł.wartość);
  36.             if (węzeł.dzieci.Count > 0)
  37.             {
  38.                 for (int i = 0; i < węzeł.dzieci.Count; i++)
  39.                 {
  40.                     PreOrder((Węzeł)węzeł.dzieci[i]);
  41.                 }
  42.             }
  43.         }
  44.  
  45.         static void DodajDzieci(Węzeł węzeł, string drzewo)
  46.         {
  47.             if (drzewo.Length <= 1)
  48.             {
  49.                 return;
  50.             }
  51.  
  52.             List<string> dzieci = new List<string>();
  53.             List<int> leweNawiasy = new List<int>();
  54.             List<int> praweNawiasy = new List<int>();
  55.  
  56.             int lewe = 0;
  57.             int prawe = 0;
  58.  
  59.             for (int i = 0; i < drzewo.Length; ++i)
  60.             {
  61.                 if (drzewo[i] == '(')
  62.                 {
  63.                     lewe++;
  64.                     leweNawiasy.Add(i);
  65.  
  66.                     while (lewe != prawe)
  67.                     {
  68.                         i++;
  69.  
  70.                         if (drzewo[i] == '(')
  71.                         {
  72.                             lewe++;
  73.                         }
  74.  
  75.                         if (drzewo[i] == ')')
  76.                         {
  77.                             prawe++;
  78.                         }
  79.                     }
  80.  
  81.                     praweNawiasy.Add(i);
  82.                 }
  83.  
  84.                 lewe = 0;
  85.                 prawe = 0;
  86.             }
  87.  
  88.             for (int i = 0; i < leweNawiasy.Count; ++i)
  89.             {
  90.                 string dziecko = drzewo.Substring(leweNawiasy[i] + 1, praweNawiasy[i] - leweNawiasy[i] - 1);
  91.  
  92.                 dzieci.Add(dziecko);
  93.             }
  94.  
  95.             for (int i = 0; i < dzieci.Count; ++i)
  96.             {
  97.                 string wartosc = dzieci[i][0].ToString();
  98.                 Węzeł węzełDziecka = UtwórzWęzeł(wartosc);
  99.  
  100.                 DodajWęzeł(węzeł, węzełDziecka);
  101.             }
  102.  
  103.             for (int i = 0; i < węzeł.dzieci.Count; ++i)
  104.             {
  105.                 DodajDzieci((Węzeł)węzeł.dzieci[i], dzieci[i]);
  106.             }
  107.         }
  108.  
  109.         static void StworzDrzewo(Drzewo drzewo, Węzeł korzeń, string nawiasowe)
  110.         {
  111.             DodajDzieci(korzeń, nawiasowe);
  112.             drzewo.korzeń = (Węzeł)korzeń.dzieci[0];
  113.         }
  114.  
  115.  
  116.         static void Main(string[] args)
  117.         {
  118.             Drzewo drzewo = new Drzewo();
  119.             Węzeł korzeń = UtwórzWęzeł("");
  120.             string nawiasowe = "(A(B(F)(D(H))(J))(C(G)(E(K))))";
  121.  
  122.             StworzDrzewo(drzewo, korzeń, nawiasowe);
  123.  
  124.             Węzeł dowiazaniowe = drzewo.korzeń;
  125.  
  126.             PreOrder(dowiazaniowe);
  127.  
  128.             Console.ReadKey();
  129.         }
  130.     }
  131. }
  132.  
Add Comment
Please, Sign In to add comment