Целью задания является разработка программы для обработки данных, организованных в древовидную структуру и проверка кандидата на знание основ типизации в языке typescript.
Класс, возвращающий информацию о дереве, находится в файле TreeData. Каждый узел представляет собой реализацию TreeNode.
Описание полей узла:
id-idузла в дереве. Является уникальнымparentId-idузла-родителя в деревеvalue- Значение, используемое при вычисленияхaddValueCondition- Флаг-условие, отображающий перенос значения или его начислениеvalueToParent- Значение, которое должно быть начислено вышестоящим узлам дерева в зависимости от условияincrementValueConditioncontext- Контекст, используемый при вычислениях
Для установки зависимостей нужно выполнить npm i в корне проекта
Для запуска проекта используется команда npm run start
- Разработайте реализацию интерфейса ITreeWalker
Описание методов:
init- Инициализирует класс списком узлов дереваreverseWalk- Выполняет обход дерева в ширину снизу вверх, вызывая функцию-обработчик для каждого из узлов дерева (Обход происходит по уровням дерева, начиная с самого нижнего)
- Разработайте реализацию интерфейса ITreeNodeHandler
Класс должен реализовывать метод
handleNode, который работает по следующему алгоритму:
- Метод принимает узел дерева и его родителя, работа с массивом
childrenу узлов в обработчике не допускается - Если для узла выполняется условие
addValueCondition == true, то в егоvalueдолжна быть сумма значенийvalueToParentвсех его детей - Если для узла выполняется условие
addValueCondition == false, то всеvalueToParentего детей должны быть отправлены родителю, как иvalueToParentсамого узла - Если у родителя
addValueCondition == false, то значения перемещаются еще выше - Если для узла значение
valueбыло записано, то родителю должно быть отправлено только значениеvalueToParentот текущего узла
Для реализации описанного функционала можно использовать контекст TreeNode, который позволяет хранить любой заранее объявленный тип данных
- Можно использовать любые программные инструменты разработки (библиотеки/npm пакеты, IDE, версии Node.js и т.п.), разрабатывать на любой платформе
- Допускается добавление любых типов/файлов, но для изменения доступен только файл main.ts
- Необходима строгая типизация всего написанного кода
- Ориентировочное предполагаемое время на выполнение задания - 40-60 минут
- Данные задания не являются обязательными, однако позволяет более точно определить квалификацию специалиста, что положительно влияет на оценку профессиональных навыков
Отображение дерева до запуска обработчика:
Node 1 - condition: false, value: 0, valueToParent: 10
| Node 2 - condition: true, value: 0, valueToParent: 10
| | Node 4 - condition: true, value: 0, valueToParent: 10
| | | Node 5 - condition: true, value: 0, valueToParent: 10
| | | Node 8 - condition: false, value: 0, valueToParent: 10
| | | | Node 9 - condition: true, value: 0, valueToParent: 10
| | | | Node 12 - condition: true, value: 0, valueToParent: 10
| | | Node 11 - condition: true, value: 0, valueToParent: 10
| Node 3 - condition: true, value: 0, valueToParent: 10
| | Node 6 - condition: false, value: 0, valueToParent: 10
| | | Node 7 - condition: false, value: 0, valueToParent: 10
| | | | Node 10 - condition: true, value: 0, valueToParent: 10
Отображение дерева после запуска обработчика
Node 1 - condition: false, value: 0, valueToParent: 10
| Node 2 - condition: true, value: 10, valueToParent: 10
| | Node 4 - condition: true, value: 50, valueToParent: 10
| | | Node 5 - condition: true, value: 0, valueToParent: 10
| | | Node 8 - condition: false, value: 0, valueToParent: 10
| | | | Node 9 - condition: true, value: 0, valueToParent: 10
| | | | Node 12 - condition: true, value: 0, valueToParent: 10
| | | Node 11 - condition: true, value: 0, valueToParent: 10
| Node 3 - condition: true, value: 30, valueToParent: 10
| | Node 6 - condition: false, value: 0, valueToParent: 10
| | | Node 7 - condition: false, value: 0, valueToParent: 10
| | | | Node 10 - condition: true, value: 0, valueToParent: 10