Advertisement
OLLI_BS

negative_Value

Feb 21st, 2017
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.15 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 task1
  9. {
  10.     public class BinaryTree
  11.     //класс, реализующий АТД «дерево бинарного поиска»
  12.     {
  13.         //вложенный класс, отвечающий за узлы и операции допустимы для дерева бинарного
  14.         //поиска
  15.         private class Node
  16.         {
  17.             public object inf;
  18.             //информационное поле public
  19.             protected Node left;
  20.             //ссылка на левое поддерево
  21.             protected Node right;
  22.             //ссылка на правое поддерево
  23.             //конструктор вложенного класса, создает узел дерева
  24.             public Node(object nodeInf)
  25.             {
  26.                 inf = nodeInf;
  27.                 left = null;
  28.                 right = null;
  29.             }
  30.             //добавляет узел в дерево так, чтобы дерево оставалось деревом бинарного поиска
  31.             public static void Add(ref Node r, object nodeInf)
  32.             {
  33.                 if (r == null)
  34.                 {
  35.                     r = new Node(nodeInf);
  36.                 }
  37.                 else
  38.                 {
  39.                     if (((IComparable)(r.inf)).CompareTo(nodeInf) > 0)
  40.                     {
  41.                         Add(ref r.left, nodeInf);
  42.                     }
  43.                     else
  44.                     {
  45.                         Add(ref r.right, nodeInf);
  46.                     }
  47.                 }
  48.             }
  49.  
  50.                                                                                                              
  51.             // /*/*//*/*//*/*//*/*//*/*//*/*/ ||||| \*\*\\*\*\\*\*\\*\*\\*\*\\*\*\                          
  52.             public static void negativeValue(Node r, ref int temp) // 1) 4.перемножение отрицательных              
  53.             {                                                                                                
  54.                 if (r != null)                                        
  55.                 {                                                                                            
  56.                     if ((int)r.inf < 0)                                                                      
  57.                     {                                                                                        
  58.                         temp *= (int)r.inf;                                                                  
  59.                     }                                                                                        
  60.                     negativeValue(r.left, ref temp);                                                        
  61.                     negativeValue(r.right, ref temp);                                
  62.                 }
  63.                                                                    
  64.             }
  65.  
  66.             public static void treeNodeHeight(Node r, ref int counter)//2) 4. для каждого узла дерева вычислить его высоту  
  67.             {
  68.                 if (r != null)
  69.                 {
  70.  
  71.                     treeNodeHeight(Node r.left, counter /**/);
  72.                     treeNodeHeight(Node r.rigth, counter /**/);
  73.                 }
  74.             }                                                
  75.             // \*\*\\*\*\\*\*\\*\*\\*\*\\*\*\ ||||| /*/*//*/*//*/*//*/*//*/*//*/*/                          
  76.  
  77.  
  78.             public static void Preorder(Node r) //прямой обход дерева
  79.             {
  80.                 if (r != null)
  81.                 {
  82.                     Console.Write("{0} ", r.inf);
  83.                     Preorder(r.left);
  84.                     Preorder(r.right);
  85.                 }
  86.             }
  87.  
  88.             public static void Inorder(Node r) //симметричный обход дерева
  89.             {
  90.                 if (r != null)
  91.                 {
  92.                     Inorder(r.left);
  93.                     Console.Write("{0} ", r.inf);
  94.                     Inorder(r.right);
  95.                 }
  96.             }
  97.  
  98.             public static void Postorder(Node r) //обратный обход дерева
  99.             {
  100.                 if (r != null)
  101.                 {
  102.                     Postorder(r.left);
  103.                     Postorder(r.right);
  104.                     Console.Write("{0} ", r.inf);
  105.                 }
  106.             }
  107.  
  108.             public static void Search(Node r, object key, out Node item) //поиск ключевого узла в дереве
  109.             {
  110.                 if (r == null)
  111.                 {
  112.                     item = null;
  113.                 }
  114.                 else
  115.                 {
  116.                     if (((IComparable)(r.inf)).CompareTo(key) == 0)
  117.                     {
  118.                         item = r;
  119.                     }
  120.                     else
  121.                     {
  122.                         if (((IComparable)(r.inf)).CompareTo(key) > 0)
  123.                         {
  124.                             Search(r.left, key, out item);
  125.                         }
  126.                         else
  127.                         {
  128.                             Search(r.right, key, out item);
  129.                         }
  130.                     }
  131.                 }
  132.             }
  133.  
  134.             //методы Del и Delete позволяют удалить узел в дереве так, чтобы дерево при этом
  135.             //оставалось деревом бинарного поиска
  136.             private static void Del(Node t, ref Node tr)
  137.             {
  138.                 if (tr.right != null)
  139.                 {
  140.                     Del(t, ref tr.right);
  141.                 }
  142.                 else
  143.                 {
  144.                     t.inf = tr.inf;
  145.                     tr = tr.left;
  146.                 }
  147.             }
  148.  
  149.             public static void Delete(ref Node t, object key)
  150.             {
  151.                 if (t == null)
  152.                 {
  153.                     throw new Exception("Данное значение в дереве отсутствует");
  154.                 }
  155.                 else
  156.                 {
  157.                     if (((IComparable)(t.inf)).CompareTo(key) > 0)
  158.                     {
  159.                         Delete(ref t.left, key);
  160.                     }
  161.                     else
  162.                     {
  163.                         if (((IComparable)(t.inf)).CompareTo(key) < 0)
  164.                         {
  165.                             Delete(ref t.right, key);
  166.                         }
  167.                         else
  168.                         {
  169.                             if (t.left == null)
  170.                             {
  171.                                 t = t.right;
  172.                             }
  173.                             else
  174.                             {
  175.                                 if (t.right == null)
  176.                                 {
  177.                                     t = t.left;
  178.                                 }
  179.                                 else
  180.                                 {
  181.                                     Del(t, ref t.left);
  182.                                 }
  183.                             }
  184.                         }
  185.                     }
  186.                 }
  187.             }
  188.         }
  189.  
  190.         Node tree;//ссылка на корень дерева
  191.  
  192.         public object Inf //свойство позволяет получить доступ к значению информационного поля корня дерева
  193.         {
  194.             set { tree.inf = value; }
  195.             get { return tree.inf; }
  196.         }
  197.  
  198.         public BinaryTree() //открытый конструктор        
  199.         {
  200.             tree = null;
  201.         }
  202.  
  203.         private BinaryTree(Node r) //закрытый конструктор
  204.         {
  205.             tree = r;
  206.         }
  207.  
  208.         public void Add(object nodeInf) //добавление узла
  209.         {
  210.             Node.Add(ref tree, nodeInf);
  211.         }
  212.  
  213.         //обходы
  214.         public void Preorder() //прямой
  215.         {
  216.             Node.Preorder(tree);
  217.         }
  218.  
  219.         public void Inorder() //симетричный
  220.         {
  221.             Node.Inorder(tree);
  222.         }
  223.  
  224.         public void Postorder() //обратный
  225.         {
  226.             Node.Postorder(tree);
  227.         }
  228.  
  229.         public BinaryTree Search(object key) //поиск ключевого узла в дереве
  230.         {
  231.             Node r;
  232.             Node.Search(tree, key, out r);
  233.             BinaryTree t = new BinaryTree(r);
  234.             return t;
  235.         }
  236.  
  237.         public void Delete(object key) //удаление ключевого узла в дереве
  238.         {
  239.             Node.Delete(ref tree, key);
  240.         }
  241.  
  242.         // /*/*//*/*//*/*//*/*//*/*//*/*/ ||||| \*\*\\*\*\\*\*\\*\*\\*\*\\*\*\                          
  243.         //свойство возвращающее значение произведения отрицательных элементов
  244.         public void Negative()
  245.         {
  246.             int temp = 1;
  247.             Node.negativeValue(tree, ref temp);
  248.             Console.WriteLine("{0} ", temp);
  249.         }
  250.  
  251.         public void heightNode()
  252.         {
  253.             int counter = 0;
  254.             Node.treeNodeHeight(tree, ref counter);
  255.         }
  256.         // \*\*\\*\*\\*\*\\*\*\\*\*\\*\*\ ||||| /*/*//*/*//*/*//*/*//*/*//*/*/                          
  257.     }
  258.  
  259.     class Programm
  260.     {
  261.         static void Main(string[] args)
  262.         {
  263.             BinaryTree tree = new BinaryTree();
  264.             using (StreamReader fileIn = new StreamReader("../../input.txt"))
  265.             {
  266.                 string line = fileIn.ReadToEnd();
  267.                 string[] data = line.Split(' ');
  268.                 foreach (string item in data)
  269.                 {
  270.                     tree.Add(int.Parse(item));
  271.                 }
  272.             }
  273.  
  274.             tree.Negative();
  275.  
  276.  
  277.             Console.ReadKey();
  278.         }
  279.     }
  280. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement