Sobes.tech
Junior — Senior
47

Удаление из иерархии объектов всех неактивных узлов

Компании, где спрашивали:

HR SIGNAL
Условие задачи

Задача заключается в том, чтобы из дерева объектов удалить каждый узел, у которого свойство alive установлено в false. При этом, если у узла свойство alive равно true, то ни один из его предков и потомков не должен быть удалён – всё дерево, связанное с таким узлом, сохраняется.

Требования:

  • Реализовать решение двумя способами: рекурсивным и итеративным.
  • Описать, в каких ситуациях предпочтительнее применять каждый из подходов.
  • Кратко изложить плюсы и минусы рекурсии и итерации для данной задачи.
export class TreeNode {
    constructor(
        public id: number,
        public alive: boolean,
        public children: TreeNode[],
        public parent?: TreeNode
    ) { }
}

/* SOLUTION */
class TreeNodeItem extends TreeNode {
    constructor(
        public id: number,
        public alive: boolean,
        public children: TreeNodeItem[],
        public parent?: TreeNodeItem
    ) {
        super(id, alive, children, parent);
    }
}

export function cleanTree(rootNode: TreeNodeItem) {
    /* START SOLUTION */
}