kuchma19 / homework-adt

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Играемся с деревом

Пусть структура нашего дерева определена следующим образом:

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
  1. Посчитать сумму значений в узлах(Node) у которых хотябы один из 2-х дочерних элементов является желтым или красным листом
    Если нет таких, сумма = 0
    def countYellowAndRedValues(tree: Tree): Int = ??? 
  2. Найти максимальное значение узла в дереве
    def maxValue(tree: Tree): Option[Int] = ???

ADT и здание

  1. Отразить в ADT следующую предметную область:
    Здание. У здания есть строковый адрес и этажи(ссылка на 1-й этаж).
    Этаж бывает жилым и чердаком.
    У каждого жилого этажа есть 2 постояльца и лестница на следующий этаж(просто ссылка на этаж)
    У чердака нет никаких интересных свойств.
    У постояльца есть возраст и пол(м/ж).
  2. Реализовать функцию protoFold аккумулирующую целое число во время обхода здания.
    На каждом этаже аккумулируемое значение пересчитывается с помощью функции f, параметрами которой служат текущее значение аккумулятора и этаж
    (Первый параметр, это текущий аккумулятор. Второй, текущий этаж)
    Здание обходить снизу вверх. Аккумулятор изначально равен acc0
    def protoFold(building: Building, acc0: Int)(f: (Int, LivingFloor) => Int): Int = ???
  3. Используя функцию protoFold посчитать количество этажей, где есть хотя бы один мужчина старше olderThen
    (если нет таких, то 0)
    def countOldManFloors(building: Building, olderThen: Int): Int = ???
  4. Используя функцию protoFold посчитать максимальный возраст женщины в здании (если нет женщин, то 0)
    def womanMaxAge(building: Building):Int = ???

About