Сложность: medium
Дано корень бинарного дерева, представьте, что вы стоите с правой стороны от него, верните значения узлов, которые вы видите, упорядоченные сверху вниз.
Пример:
Input: root = [1,2,3,null,5,null,4]
Output: [1,3,4]
👨💻 Алгоритм:
1️⃣Инициализируйте список правого обзора rightside. Инициализируйте две очереди: одну для текущего уровня и одну для следующего. Добавьте корень в очередь nextLevel.
2️⃣Пока очередь nextLevel не пуста:
Инициализируйте текущий уровень: currLevel = nextLevel и очистите очередь следующего уровня nextLevel.
Пока очередь текущего уровня не пуста:
Извлеките узел из очереди текущего уровня.
Добавьте сначала левый, а затем правый дочерний узел в очередь nextLevel.
Теперь очередь currLevel пуста, и узел, который у нас есть, является последним и составляет часть правого обзора. Добавьте его в rightside.
3️⃣Верните rightside.
😎 Решение:
class Solution {
rightSideView(root) {
if (root === null) return [];
let nextLevel = [root];
let rightside = [];
while (nextLevel.length > 0) {
let currLevel = nextLevel;
nextLevel = [];
for (let node of currLevel) {
if (node.left !== null) nextLevel.push(node.left);
if (node.right !== null) nextLevel.push(node.right);
}
rightside.push(currLevel[currLevel.length - 1].val);
}
return rightside;
}
}Ставь 👍 и забирай 📚 Базу знаний
