В дереве бинарного поиска найти для него количество четных значений узлов дерева - C#

Узнай цену своей работы

Формулировка задачи:

В файле input.txt хранится последовательность целых чисел. По входной последовательности построить дерево бинарного поиска и найти для него. Проблема в обходе всего дерева,чтобы проверить на чётность(ну т.е. рекурсивно по обеим веткам).Укажу в коде затруднения...
Листинг программы
  1. public class BinaryTree
  2. {
  3. public class Node
  4. {
  5. public object inf; //информационное поле
  6. public Node left; //ссылка на левое поддерево
  7. public Node rigth; //ссылка на правое поддерево
  8. //конструктор вложенного класса, создает узел дерева
  9. public Node(object nodeInf)
  10. {
  11. inf = nodeInf;
  12. left = null;
  13. rigth = null;
  14. }
  15. //добавляет узел в дерево так, чтобы дерево оставалось деревом бинарного поиска
  16. public static void Add(ref Node r, object nodeInf)
  17. {
  18. if (r == null)
  19. {
  20. r = new Node(nodeInf);
  21. }
  22. else
  23. {
  24. if (((IComparable)(r.inf)).CompareTo(nodeInf) > 0)
  25. {
  26. Add(ref r.left, nodeInf);
  27. }
  28. else
  29. {
  30. Add(ref r.rigth, nodeInf);
  31. }
  32. }
  33. }
  34. public static void Preorder(Node r) //прямой обход дерева
  35. {
  36. if (r != null)
  37. {
  38. Console.Write("{0} ", r.inf);
  39. Preorder(r.left);
  40. Preorder(r.rigth);
  41. }
  42. }
  43. public static int count_ch(Node r,ref int x, int count)
  44. {
  45. if (r != null)
  46. {
  47. if(x%2 ==0)//вот здесь вот проверка
  48. {
  49. count++;
  50. }
  51. count_ch(r.left, ref x, count);
  52. count_ch(r.rigth, ref x, count);
  53. }
  54. return count;
  55. }
  56.  
  57. private static void Del(Node t, ref Node tr)
  58. {
  59. if (tr.rigth != null)
  60. {
  61. Del(t, ref tr.rigth);
  62. }
  63. else
  64. {
  65. t.inf = tr.inf;
  66. tr = tr.left;
  67. }
  68. }
  69. public static void Delete(ref Node t, object key)
  70. {
  71. if (t == null)
  72. {
  73. throw new Exception("Данное значение в дереве отсутствует");
  74. }
  75. else
  76. {
  77. if (((IComparable)(t.inf)).CompareTo(key) > 0)
  78. {
  79. Delete(ref t.left, key);
  80. }
  81. else
  82. {
  83. if (((IComparable)(t.inf)).CompareTo(key) < 0)
  84. {
  85. Delete(ref t.rigth, key);
  86. }
  87. else
  88. {
  89. if (t.left == null)
  90. {
  91. t = t.rigth;
  92. }
  93. else
  94. {
  95. if (t.rigth == null)
  96. {
  97. t = t.left;
  98. }
  99. else
  100. {
  101. Node tr = t.left;
  102. Del(t, ref tr);
  103. }
  104. }
  105. }
  106. }
  107. }
  108. }
  109. }
  110. Node tree; //ссылка на корень дерева
  111. //свойство позволяет получить доступ к значению информационного поля корня дерева
  112. public object Inf
  113. {
  114. set
  115. {
  116. tree.inf = value;
  117. }
  118. get
  119. {
  120. return tree.inf;
  121. }
  122. }
  123. public BinaryTree()
  124. {
  125. tree = null;
  126. }
  127. private BinaryTree(Node r)
  128. {
  129. tree = r;
  130. }
  131. public void Add(object nodeInf) //добавление узла в дерево
  132. {
  133. Node.Add(ref tree, nodeInf);
  134. }
  135. public int count_ch()
  136. {
  137. int count = 0;
  138. int x = Convert.ToInt32(tree.inf);//тут и ошибка,берёт только корень,а дальше не проходит
  139. Node.count_ch(tree,ref x, count);
  140. return x;
  141. }
  142. public void Preorder()
  143. {
  144. Node.Preorder(tree);
  145. }
  146. /* В файле : 10 9 8 7 6 5 4 3 2 1 */
  147. }

Решение задачи: «В дереве бинарного поиска найти для него количество четных значений узлов дерева»

textual
Листинг программы
  1.             public static int Preorder(Node r) //прямой обход дерева
  2.             {
  3.                 int count = 0;
  4.                 if (r != null)
  5.                 {
  6.                     if ((int)r.inf % 2 == 0) count++;
  7.                     count += Preorder(r.left);
  8.                     count += Preorder(r.rigth);
  9.                 }
  10.                 return count;
  11.             }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы