Обойдите left и right: числовой узел выведите, отсутствующий пропустите, для объекта повторите обход. Проверка типа сохраняет в том числе нулевые листья.
Реализовать функцию, которая выведет все значения на концах "ветвей" в консоль
Обойдите left и right: числовой узел выведите, отсутствующий пропустите, для объекта повторите обход. Проверка типа сохраняет в том числе нулевые листья.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализовать функцию, которая выведет все значения на концах "ветвей" в консоль
interface ITree { left?: ITree | number; right?: ITree | number; }
function printTree(data: ITree): void {}
Ответ
Обойдите left и right: числовой узел выведите, отсутствующий пропустите, для объекта повторите обход. Проверка типа сохраняет в том числе нулевые листья.
Для конечного дерева без циклов:
interface ITree {
left?: ITree | number;
right?: ITree | number;
}
function printTree(data: ITree): void {
function visit(node: ITree | number | undefined): void {
if (node === undefined) return;
if (typeof node === 'number') { console.log(node); return; }
visit(node.left);
visit(node.right);
}
visit(data);
}
Обход слева направо занимает O(n), стек — O(h). Для очень глубокого дерева лучше явный стек, чтобы не переполнить стек вызовов.