В дереве бинарного поиска найти для него количество четных значений узлов дерева - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д