В дереве бинарного поиска найти для него количество четных значений узлов дерева - 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;
}