Seal_of_approval

Pr15R2ex9

Mar 18th, 2016
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.88 KB | None | 0 0
  1. Program.cs
  2.  
  3. using System;
  4. using System.IO;
  5.  
  6. namespace test
  7. {
  8.     class Program
  9.     {
  10.         public static void Main (string[] args)
  11.         {
  12.             BinaryTree myTree = new BinaryTree ();
  13.             using (StreamReader fileIn = new StreamReader ("/Users/masha/Projects/test/test/input.txt"))
  14.             {
  15.  
  16.                 string line = fileIn.ReadToEnd ();
  17.                 string[] mas = line.Split (' ');
  18.  
  19.                 foreach (string item in mas)
  20.                     myTree.Add (int.Parse(item));
  21.  
  22.                 myTree.Preorder();
  23.  
  24.                 foreach (string inf in mas)
  25.                 {
  26.                     if (int.Parse(inf) % 2 == 1)
  27.                         myTree.Delete(int.Parse(inf));
  28.                 }
  29.  
  30.                 Console.WriteLine();
  31.                 myTree.Preorder ();
  32.             }
  33.         }
  34.     }
  35. }
  36.  
  37. ____________________________________________________________________________________________________________________________________________________
  38. BinaryTree.cs
  39.  
  40. using System;
  41.  
  42. namespace test
  43. {
  44.     public class BinaryTree
  45.     {
  46.         //вложенный класс, отвечающий за узлы и операции для дерева
  47.         public class Node
  48.         {
  49.             public object inf;
  50.             public Node left;
  51.             public Node right;
  52.             public Node parent;
  53.             public static Node root;
  54.  
  55.             //создание узла
  56.             public Node (object nodeInf)
  57.             {
  58.                 this.inf = nodeInf;
  59.                 left = null;
  60.                 right = null;
  61.                 parent = null;
  62.             }
  63.  
  64.             //добавление узла согласно определению бин. дерева
  65.             public static void Add(ref Node r, object nodeInf)
  66.             {
  67.                 if (r == null)
  68.                 {
  69.                     r = new Node (nodeInf);
  70.                 }
  71.                 else
  72.                 {
  73.                     if (((IComparable)(r.inf)).CompareTo (nodeInf) > 0)
  74.                     {
  75.                         Add (ref r.left, nodeInf);
  76.                         r.left.parent = r;
  77.                     }
  78.                     else if (((IComparable)(r.inf)).CompareTo (nodeInf) <= 0)
  79.                     {
  80.                         Add (ref r.right, nodeInf);
  81.                         r.right.parent = r;
  82.                     }
  83.                     else if (r.parent == null)
  84.                         root = r;
  85.                 }
  86.             }
  87.  
  88.             //удаление
  89.             private static void Del(Node t, ref Node node)
  90.             {
  91.                 if (node.right != null)
  92.                 {
  93.                     Del (t, ref node.right);
  94.                 }
  95.                 else
  96.                 {
  97.                     t.inf = node.inf;
  98.                     node = node.left;
  99.                 }
  100.             }
  101.  
  102.             public static void Delete (ref Node node, object key)
  103.             {
  104.                 if (node == null)
  105.                     throw new Exception ("Exeption");
  106.                 else
  107.                 {
  108.                     if (((IComparable)(node.inf)).CompareTo (key) > 0)
  109.                         Delete (ref node.left, key);
  110.                     else if (((IComparable)(node.inf)).CompareTo (key) < 0)
  111.                         Delete (ref node.right, key);
  112.                     else
  113.                     {
  114.                         if (node.left == null)
  115.                             node = node.right;
  116.                         else if (node.right == null)
  117.                             node = node.left;
  118.                         else if (node.right != null && node.left != null)
  119.                             Del (node, ref node.left);
  120.                     }
  121.                 }
  122.             }
  123.  
  124.             public static void Preorder (Node r)
  125.             {
  126.                 if (r != null)
  127.                 {
  128.                     Console.Write ("{0} ", r.inf);
  129.                     Preorder (r.left);
  130.                     Preorder (r.right);
  131.                 }
  132.             }
  133.  
  134.             public static void Search (Node r, object key, out Node inf)
  135.             {
  136.                 if (r == null)
  137.                     inf = null;
  138.                 else if (((IComparable)(r.inf)).CompareTo (key) == 0)
  139.                     inf = r;
  140.                 else if (((IComparable)(r.inf)).CompareTo (key) > 0)
  141.                     Search (r.left, key, out inf);
  142.                 else
  143.                     Search (r.right, key, out inf);
  144.             }
  145.  
  146.         }
  147.         //конец вложенного класса
  148.  
  149.         Node tree;
  150.  
  151.         public Node Tree
  152.         {
  153.             get{return tree;}
  154.         }
  155.  
  156.         public object Inf
  157.         {
  158.             set{tree.inf = value;}
  159.             get{return tree.inf;}
  160.         }
  161.  
  162.         public BinaryTree()
  163.         {
  164.             tree = null;
  165.         }
  166.  
  167.         private BinaryTree (Node r)
  168.         {
  169.             tree = r;
  170.         }
  171.  
  172.         public void Add(object nodeInf)
  173.         {
  174.             Node.Add (ref tree, nodeInf);
  175.         }
  176.            
  177.         public void Delete(object key)
  178.         {
  179.             Node.Delete (ref tree, key);
  180.         }
  181.  
  182.         public void Preorder()
  183.         {
  184.             Node.Preorder (tree);
  185.         }
  186.  
  187.         public BinaryTree Search(object key)
  188.         {
  189.             Node node;
  190.             Node.Search (tree, key, out node);
  191.             BinaryTree binaryTree = new BinaryTree (node);
  192.             return binaryTree;
  193.         }
  194.     }
  195. }
Advertisement
Add Comment
Please, Sign In to add comment