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

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


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

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

5   голосов , оценка 3.8 из 5
Похожие ответы