LeetCode热题(JS版)- 199. 二叉树的右视图

64 阅读1分钟

题目

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

示例 1:

image.png

输入: [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 官网上的题解。

image.png