题目
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例 1:
输入: [1,2,3,null,5,null,4]
输出: [1,3,4]
示例 2:
输入: [1,null,3]
输出: [1,3]
示例 3:
输入: []
输出: []
提示:
二叉树的节点个数的范围是 [0,100]
-100 <= Node.val <= 100
思路
这是一道典型的二叉树遍历问题,可以使用广度优先搜索(BFS)或深度优先搜索(DFS)来解决。 下面是使用 BFS 解决该问题的 JavaScript 代码,思路是对二叉树进行层次遍历,每层只取最右侧的节点:
var rightSideView = function(root) {
if (!root) return [];
const queue = [root];
const res = [];
while (queue.length) {
const size = queue.length;
for (let i = 0; i < size; i++) {
const node = queue.shift();
if (i === size - 1) res.push(node.val);
if (node.left) queue.push(node.left);
if (node.right) queue.push(node.right);
}
}
return res;
};
其中,queue 数组用于存储待遍历的节点,res 数组用于存储右视图中的节点值。每次从队列中取出一层节点,遍历该层节点时,只取最右侧的节点加入到 res 数组中,并将该节点的左右子节点加入到队列中以便遍历下一层节点。 另外,也可以使用 DFS 解决该问题,具体实现可以参考 LeetCode 官网上的题解。