Пусть структура нашего дерева определена следующим образом:
sealed trait Tree
case class Node(value: Int, left: Tree, right: Tree) extends Tree
case object RedLeaf extends Tree
case object YellowLeaf extends Tree
case object GreenLeaf extends Tree
- Посчитать сумму значений в узлах(Node) у которых хотябы один из 2-х дочерних элементов является желтым или красным листом
Если нет таких, сумма = 0def countYellowAndRedValues(tree: Tree): Int = ???
- Найти максимальное значение узла в дереве
def maxValue(tree: Tree): Option[Int] = ???
- Отразить в ADT следующую предметную область:
Здание. У здания есть строковый адрес и этажи(ссылка на 1-й этаж).
Этаж бывает жилым и чердаком.
У каждого жилого этажа есть 2 постояльца и лестница на следующий этаж(просто ссылка на этаж)
У чердака нет никаких интересных свойств.
У постояльца есть возраст и пол(м/ж). - Реализовать функцию protoFold аккумулирующую целое число во время обхода здания.
На каждом этаже аккумулируемое значение пересчитывается с помощью функции f, параметрами которой служат текущее значение аккумулятора и этаж
(Первый параметр, это текущий аккумулятор. Второй, текущий этаж)
Здание обходить снизу вверх. Аккумулятор изначально равен acc0def protoFold(building: Building, acc0: Int)(f: (Int, LivingFloor) => Int): Int = ???
- Используя функцию protoFold посчитать количество этажей, где есть хотя бы один мужчина старше olderThen
(если нет таких, то 0)def countOldManFloors(building: Building, olderThen: Int): Int = ???
- Используя функцию protoFold посчитать максимальный возраст женщины в здании
(если нет женщин, то 0)
def womanMaxAge(building: Building):Int = ???