Beispiel #1
0
            // Задание 2: рекурсивный метод возвращает количество элементов с заданным значением в поддереве
            public int AmountOfValue(int value)
            {
                // если данное значение есть в рассматриваемой вершине
                int current = 0;

                if (Data == value)
                {
                    ++current;
                }
                // выход из рекурсии. Случай листа(нет потомков)
                if (Left == null && Right == null)
                {
                    return(current);
                }
                // случай сучка(есть только правый потомок)
                if (Left != null && Right == null)
                {
                    return(current + Left.AmountOfValue(value));
                }
                // случай сучка(есть только левый потомок)
                if (Left == null && Right != null)
                {
                    return(current + Right.AmountOfValue(value));
                }
                // случай сучка(есть оба потомка)
                if (Left != null && Right != null)
                {
                    return(current + Left.AmountOfValue(value) + Right.AmountOfValue(value));
                }
                // сюда программа дойти не может, поскольку разобраны всевозможные случаи
                return(-1);
            }