В дереве бинарного поиска найти для него количество четных значений узлов дерева - C#
Формулировка задачи:
В файле input.txt хранится последовательность целых чисел. По входной последовательности построить дерево бинарного поиска и найти для него.
Проблема в обходе всего дерева,чтобы проверить на чётность(ну т.е. рекурсивно по обеим веткам).Укажу в коде затруднения...
Листинг программы
- public class BinaryTree
- {
- public class Node
- {
- public object inf; //информационное поле
- public Node left; //ссылка на левое поддерево
- public Node rigth; //ссылка на правое поддерево
- //конструктор вложенного класса, создает узел дерева
- public Node(object nodeInf)
- {
- inf = nodeInf;
- left = null;
- rigth = null;
- }
- //добавляет узел в дерево так, чтобы дерево оставалось деревом бинарного поиска
- public static void Add(ref Node r, object nodeInf)
- {
- if (r == null)
- {
- r = new Node(nodeInf);
- }
- else
- {
- if (((IComparable)(r.inf)).CompareTo(nodeInf) > 0)
- {
- Add(ref r.left, nodeInf);
- }
- else
- {
- Add(ref r.rigth, nodeInf);
- }
- }
- }
- public static void Preorder(Node r) //прямой обход дерева
- {
- if (r != null)
- {
- Console.Write("{0} ", r.inf);
- Preorder(r.left);
- Preorder(r.rigth);
- }
- }
- public static int count_ch(Node r,ref int x, int count)
- {
- if (r != null)
- {
- if(x%2 ==0)//вот здесь вот проверка
- {
- count++;
- }
- count_ch(r.left, ref x, count);
- count_ch(r.rigth, ref x, count);
- }
- return count;
- }
- private static void Del(Node t, ref Node tr)
- {
- if (tr.rigth != null)
- {
- Del(t, ref tr.rigth);
- }
- else
- {
- t.inf = tr.inf;
- tr = tr.left;
- }
- }
- public static void Delete(ref Node t, object key)
- {
- if (t == null)
- {
- throw new Exception("Данное значение в дереве отсутствует");
- }
- else
- {
- if (((IComparable)(t.inf)).CompareTo(key) > 0)
- {
- Delete(ref t.left, key);
- }
- else
- {
- if (((IComparable)(t.inf)).CompareTo(key) < 0)
- {
- Delete(ref t.rigth, key);
- }
- else
- {
- if (t.left == null)
- {
- t = t.rigth;
- }
- else
- {
- if (t.rigth == null)
- {
- t = t.left;
- }
- else
- {
- Node tr = t.left;
- Del(t, ref tr);
- }
- }
- }
- }
- }
- }
- }
- Node tree; //ссылка на корень дерева
- //свойство позволяет получить доступ к значению информационного поля корня дерева
- public object Inf
- {
- set
- {
- tree.inf = value;
- }
- get
- {
- return tree.inf;
- }
- }
- public BinaryTree()
- {
- tree = null;
- }
- private BinaryTree(Node r)
- {
- tree = r;
- }
- public void Add(object nodeInf) //добавление узла в дерево
- {
- Node.Add(ref tree, nodeInf);
- }
- public int count_ch()
- {
- int count = 0;
- int x = Convert.ToInt32(tree.inf);//тут и ошибка,берёт только корень,а дальше не проходит
- Node.count_ch(tree,ref x, count);
- return x;
- }
- public void Preorder()
- {
- Node.Preorder(tree);
- }
- /* В файле : 10 9 8 7 6 5 4 3 2 1 */
- }
Решение задачи: «В дереве бинарного поиска найти для него количество четных значений узлов дерева»
textual
Листинг программы
- public static int Preorder(Node r) //прямой обход дерева
- {
- int count = 0;
- if (r != null)
- {
- if ((int)r.inf % 2 == 0) count++;
- count += Preorder(r.left);
- count += Preorder(r.rigth);
- }
- return count;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д