Необходимо найти максимальную ширину бинарного дерева, то есть максимальное расстояние между вершинами на одном уровне.
Ширина одного уровня определяется как количество вершин между крайними вершинами на этом уровне (самой левой и самой правой), включая вершины, которые могли бы быть в этом дереве, если бы все ряды были полностью заполнены.
Гарантируется, что ответ является числом меньше 2³¹ - 1, то есть влезает в тип int32 и с большим запасом влезает в тип number.
Допустим, у нас есть такое дерево:
3 width = 1
/ \
5 2 width = 2
/ /
1 8 width = 3
\ /
3 6 width = 4
/ \
7 4 width = 2
Визуально заполним дерево недостающими вершинами, чтобы заполнились все ряды. Ответом к задаче будет число 4, т.к. в четвертом ряду между вершиной 3 и 6 расстояние 4 (включая обе крайние вершины).
3 width = 1
/ \
5 2 width = 2
/ \ / \
1 × 8 × width = 3
/ \ / \ / \ / \
× 3 × × 6 × × × width = 4
/ \
7 4 width = 2
const root = { value: 3, left: { value: 5, left: { value: 1, left: null, right: { value: 3, left: null, right: null, }, }, right: null, }, right: { value: 2, left: { value: 8, left: { value: 6, left: { value: 7, left: null, right: null, }, right: { value: 4, left: null, right: null, }, }, right: null, }, right: null, }, }; console.log(widthOfBinaryTree(root)); // 4